C定义函数?

时间:2017-12-13 00:08:50

标签: c

我试图理解为什么这个程序打印出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);
}

2 个答案:

答案 0 :(得分:3)

Macros没有任何功能

在编译的第一阶段,预处理之后,宏被展开

z = mul(x+1, y+1);
// becomes
z = (x+1 * y+1);

毫无疑问x + 1*y + 1 == 8

定义此宏的更好方法是括号xy

#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

的内容

答案 1 :(得分:0)

A macro不执行数学运算,而是代码替换。

因此,在预处理步骤之后,您的代码应如下所示:

 int main() {
     int x = 3;
     int y = 4;
     int z = 0;
     z = (x+1 * y+1);
     printf(“4*5 = %d \n”, z);
  }

所以z应该等于3 + 4 * 1 + 1,即8。