所以我明天参加考试,然后在我的问题上遇到了这个问题。
#define mul(x,y) (x * y)
#include <stdio.h>
#include <string.h>
int main()
{
int x = 3;
int y = 4;
int z = 0;
z = mul(x+1, y+1);
printf("4 * 5 = %d \n", z);
return 0;
}
我的问题是,为什么输出8而不是20。
因为当我用z= mul(x+1,y+1)
替换z= mul((x+1),(y+1))
时,我得到20的正确答案
答案 0 :(得分:3)
宏#define mul(x,y) (x * y)
实际告诉预编译器,如果它找到字符串 mul(任何模式X ,任何模式Y ),它应该用(任何模式X * 任何模式Y )替换它。
那么你的例子中有什么?
int x = 3;
int y = 4;
int z = 0;
z = mul(x+1, y+1);
更换mul
后,即可获得
int x = 3;
int y = 4;
int z = 0;
z = x+1*y+1;
==&GT; z = 3 + 1 * 4 + 1 = 8
最佳做法是用括号括起每个宏参数。在您的示例中(为了获得所需的结果),它应该是:
#define mul(x,y) ((x) * (y))