2012-06-16 130 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

這真的很棘手,謝謝 –