別のマクロの値に基づいてコンパイル時にマクロを定義したいと思います。予想通りしかし、このコードが実行されない:奇妙なマクロ定義の問題
max = 2
0
1
2
...
を、それが単に印刷しなければならない場合、終了まで継続:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIXTEEN 16
#define TWO (SIXTEEN % 8 == 0)? (SIXTEEN/8) : ((SIXTEEN/8) + 1)
int main();
int main() {
printf("max = %d\n", TWO);
int i;
for (i = 0; i < TWO; i++) {
printf("%d\n", i);
}
return 0;
}
これは印刷
max = 2
0
1
と出ます。私が代わりにこれを行う場合は
、それが動作します:
#define TWO 2
が、私はこれはマクロの定義の問題だと思った...しかし、私は元の#defineで次の操作を行う場合、それはに思えます仕事:
誰でもここで起こっていることを説明できますか?
+1 37秒で私を打つ。 =( –
+1一般的な経験則は、マクロが式に展開されることになっている場合、(マッチングする)ペアの括弧で囲まれていることを確認します。ただし、1つのトークンに展開することが保証されているOPのSIXTEENマクロのように)。 –