1


0

このコードを説明してもらえますか?
#include
#include CONST15
#define CONST2 CONST2*CONST1
#define CONST3 CONST2+CONST2
int main(int argc,char**argv)
{
printf("%\n",CONST3);
}

1 Answer


2


最初に、#defined’dシンボルを展開するステップである前処理は、実際のコンパイルの前に行われます。

それから、そのようなシンボルは再帰的であるとは思いませんが、置き換えることができます。 したがって、それが完全なプログラムであり、「」がCONST15またはCONST2を定義していないと仮定すると、妥当な結果は得られません。 私のコンパイラは、何を含めるかを指定していない#include行でエラーを出します。

ただし、次のようないくつかのシンボルをコンパイル時に定義してコンパイルできます。

gcc -DCONST15='"math.h"' -DCONST1=3 -DCONST2=5 foo.c

これにより、#includeに(無害な)処理対象が与えられ、CONST1およびCONST2に値が提供されます。

次に、最初の定義はCONST2を3 * 5(15ではなく、ちょうど)に設定し、2番目の定義はCONST3を3 * 5 + 3 * 5に設定します。