我正在运行以下程序并得到结果 9 7,我明白为什么输出是 9 但我不明白为什么输出是 7。
#include<stdio.h>
#define sqr(i) (i*i)
int main()
{
printf("%d %d", sqr(3), sqr(3+1));
return 0;
}
对于 sqrt(3+1)
的第二个函数,micro 如何扩展以及我如何获得 7 输出?
最佳答案
您可以让编译器或 IDE 预处理文件并向您展示宏是如何展开的。
在您的例子中,sqr(3+1)
扩展为 (3+1*3+1)
。现在 C 运算符的优先级意味着乘法在加法之前完成。所以 (3+1*3+1)
-> (3+3+1)
-> (7)
。
您可以通过以这种方式定义宏来解决此问题,并在参数周围加上括号:
#define sqr(i) ((i)*(i))
关于带有表达式不需要的结果的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712140/