#include <iostream>
using namespace std;
#define sqr(x) (x*x)
int main()
{
int a,b=3;
a = sqr (b+2);
printf("%d",a);
return 0;
}
答案是11而不是25,原因是预编译宏展开的时候,被展开成了b+2*b+2。
将x括起来,改成如下程序
#include <iostream>
using namespace std;
#define sqr(x) ((x)*(x))
int main()
{
int a,b=3;
a = sqr (b+2);
printf("%d",a);
return 0;
}
则结果是25
比较这两种情况,我们发现在写宏的时候最好把能括的都放到括号里,防止出现二义性问题。