C定义函数?

标签 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);
}

最佳答案

<强> 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的内容。

关于C定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783580/

相关文章:

c - 将 float 分配给整数时无限循环

c -/dev/shm 在 Mac OS X 上的位置

c - C 语言无损数据压缩,无需动态内存分配

c - 整数除法的解释——C代码

c - 如何在 C 中连接字符串和整数?

c - fatal error : tlpi_hdr. h:没有那个文件或目录

c - htons() 在 Big-Endian 系统上做什么?

c - 使用 C 返回数组

c++ - 性能 32 位与 64 位算术

c - 如何打印程序执行的次数?