c - 为什么返回值不是我在这个带有宏的 C 程序中所期望的值?

标签 c macros printf

<分区>

当我运行以下代码时,返回值为 11,但我期望它返回 25。有人可以解释一下吗?

#include<stdio.h>
#define SQR(a) a*a

int main()
{
    int i=3;
    printf("%d",SQR(i+2));
    return 1;
}

最佳答案

需要更多的括号。这:

#define SQR(a) a*a

扩展为:

i+2*i+2

即:

3+2*3+2

这是 11,因为 * 优先于 +

你需要像这样定义你的宏:

#define SQR(a) ((a)*(a))

确保这种事情不会发生。

关于c - 为什么返回值不是我在这个带有宏的 C 程序中所期望的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557321/

相关文章:

c - 在函数中使用结构

c - 从文件中读取日期时 atoi 行为异常

多次调用 C 预处理器宏(通过变量)

Excel 检测并跟踪任何工作表中的(值)变化

c - 在 main、C 中使用后面函数中的变量

c - 了解此 C 程序的行为

python - 如何使用 mraa 将 lsm9ds1 连接到 respeaker?

C、带有多个变量的 printf 段错误

c++ - 从 "caml/mlvalues.h"包装转换宏是否安全,例如 Val_int、Int_val 与某些功能?

java - 将 printf %f %n 与 double 一起使用,然后添加字符串时遇到问题吗?