现在的位置: 首页 > 综合 > 正文

宏二义性的问题

2018年04月13日 ⁄ 综合 ⁄ 共 320字 ⁄ 字号 评论关闭

#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

比较这两种情况,我们发现在写宏的时候最好把能括的都放到括号里,防止出现二义性问题。

抱歉!评论已关闭.