2012-06-16 85 views
2
#include <stdio.h> 

#define next(x) x + 1 
#define prev(x) x - 1 
#define mult(x,y) x * y 

int main(void) { 

int a = 3, b = 4; 
printf("%d\n", mult(next(a), prev(b))); 
return 0; 

} 

mult(next(3),prev(4))扩展到mult(3+1, 4-1)这是12,但是答案是6宏定义功能

这是为什么?

+0

尝试改变'#定义下一个(x)x + 1#定义下一个(X)(X + 1)和分组做相同的()' – Cyclonecode

+0

您可能需要遵循的标准做法在ALL_CAPS中命名宏标识符,使其在代码中显示它是* special *。 – pmg

回答

10

...和mult(3+1, 4-1)扩展到

3+1 * 4-1 

这导致3 + 4 - 1或6

在函数等每个参数周围和整个周围宏定义把括号定义

#define next(x) ((x) + 1) 
#define prev(x) ((x) - 1) 
#define mult(x, y) ((x) * (y)) 
+0

这真的很棘手,谢谢 –