C:定义的行为返回错误的结果

时间:2017-04-19 19:27:35

标签: c user-defined-functions

所以我明天参加考试,然后在我的问题上遇到了这个问题。

#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的正确答案

1 个答案:

答案 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))