我正在运行下面的程序,得到的结果是97,我知道为什么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是如何扩展的,Im是如何获得7个输出的? 最佳答案
您可以让编译器或IDE对文件进行预处理,并显示宏是如何展开的。
在您的情况下,sqr(3+1)
扩展为(3+1*3+1)
。现在C运算符的优先级意味着乘法是在加法之前完成的。所以。
可以通过这样定义宏来解决此问题,在参数周围加上括号:
#define sqr(i) ((i)*(i))
关于c - C宏,带有表达式不必要的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44712140/