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。有人能解释一下吗?
#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