次のコードを実行すると、
#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'
誰かが出力を説明してもらえますか?
次のコードを実行すると、
#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'
誰かが出力を説明してもらえますか?
マクロが無効な関数のようなマクロのままになっている場合、括弧を付けて呼び出していないため、マクロはまったく展開されません。したがって、X はプリプロセッサによって置き換えられることはなくUndefined symbol 'X'
、サンプル コードの理由です。
これを展開したい場合は、次のように括弧で呼び出す必要があります。
printf("%d",4*X()+2);
ただし、これは前処理されたときにエラーになるだけで、有効なマクロ パラメータ名ではありません4+Y
。X+3
これらの定義が適切な定義であり、関数のようなマクロではないように、答えが多少修正された場合、つまり:
#define X (4+Y)
#define Y (X+3)
定義間に循環参照があります...
X -> Y -> X... など
マクロは 1 回しか展開されないため、次のように展開されます。
printf("%d",4*(4+(X+3))+2);
これは、この使用例で X が未定義のシンボルである理由を説明しています。
スペースが恋しい
#define X (4+Y)
#define Y (X+3)