我试图理解为什么这个程序打印出 8。
#define mul(x,y) (x * y)
int main() {
int x = 3;
int y = 4;
int z = 0;
z = mul(x+1, y+1);
printf(“4*5 = %d \n”, z);
}
最佳答案
<强> Macros不是函数
第一阶段编译、预处理后,宏展开:
z = mul(x+1, y+1);
// becomes
z = (x+1 * y+1);
毫无疑问,x + 1*y + 1 == 8
。
定义此宏的更好方法是将 x
和 y
括起来:
#define mul(x, y) ((x)*(y))
您可以自己尝试一下:使用 gcc -E foo.c -o foo.i
编译此代码
#define mul(x, y) (x * y)
int x = 3;
int y = 4;
int z = mul(x+1, y+1)
并查看foo.i
的内容。
关于C定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783580/