我想在编译时根据另一个宏的值定义一个宏。但是这个代码不执行如预期:奇怪的宏定义问题
#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