This question already has answers here:
Closed 6 years ago.
Strange behaviour of macros C/C++
(5个答案)
Strange behavior of Macro-expansion
(3个答案)
当我运行下面的代码时,返回值是11,但我希望它返回25。有人能解释一下吗?
扩展到:
即:
这是11,因为
您需要这样定义宏:
以确保这类事情不会发生。
(5个答案)
Strange behavior of Macro-expansion
(3个答案)
当我运行下面的代码时,返回值是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))
以确保这类事情不会发生。
10-05 19:28