我想在編譯時根據另一個宏的值定義一個宏。但是這個代碼不執行如預期:奇怪的宏定義問題
#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
2
...
,並一直持續到終止,當它應該是簡單的打印:
max = 2
0
1
和退出。
如果我這樣做,相反,它的工作原理:
#define TWO 2
我認爲這是與宏的定義問題......但是,如果我這樣做與原來的#define以下,這似乎工作:
...
int count = TWO;
for (i = 0; i < count; i++) {
...
任何人都可以解釋這裏發生了什麼?
+1打我37秒。 =( – 2010-12-15 21:55:33
+1)一般的經驗法則是:如果你的宏應該擴展成一個表達式,那麼確保它被包含在一對(匹配的)parens中。一個例外是如果它保證擴展成一個單一的記號(像OP的SIXTEEN宏)。 – 2010-12-15 21:59:17