当我运行以下代码时,返回值为 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))
以确保这种事情不会发生。
宏与常规函数不同。
在重新处理期间,所有宏都被它们所定义的完全替换。在您的情况下,该行:
printf("%d",SQR(i+2));
替换为以下行:
printf("%d", i+2*i+2);
所以,你在那里看到了意想不到的结果。
正确的方法是:
#define SQR(a) ((a)*(a))
预处理器结果将是:
printf("%d", ((i+2)*(i+2)));
试着学习这个错误。这类问题很难调试。