2

次のコードを実行すると、

#include<stdio.h>
#define X (4+Y)
#define Y (X+3)

int main()
{
  printf("%d",4*X+2); 
  return 0;
}

I am getting the following output: 
Error: Undefined symbol 'X'

誰かが出力を説明してもらえますか?

4

3 に答える 3

5

マクロが無効な関数のようなマクロのままになっている場合、括弧を付けて呼び出していないため、マクロはまったく展開されません。したがって、X はプリプロセッサによって置き換えられることはなくUndefined symbol 'X'、サンプル コードの理由です。

これを展開したい場合は、次のように括弧で呼び出す必要があります。

printf("%d",4*X()+2);

ただし、これは前処理されたときにエラーになるだけで、有効なマクロ パラメータ名ではありません4+YX+3

これらの定義が適切な定義であり、関数のようなマクロではないように、答えが多少修正された場合、つまり:

#define X (4+Y)
#define Y (X+3)

定義間に循環参照があります...

X -> Y -> X... など

マクロは 1 回しか展開されないため、次のように展開されます。

printf("%d",4*(4+(X+3))+2);

これは、この使用例で X が未定義のシンボルである理由を説明しています。

于 2013-07-24T15:30:07.370 に答える
1

スペースが恋しい

#define X (4+Y)
#define Y (X+3)
于 2013-07-24T15:30:07.400 に答える