c++编程思想中的关于宏的一个有关问题
c++编程思想中的关于宏的一个问题
程序如下:
#define BAND(x) (((x)>5&&x<10)?(x):0)
void main()
{
for(int i=4;i<7;i++)
{
int a=i;
cout<<"a="<<a<<endl<<'\t';
cout<<"BAND(++a)="<<
BAND(++a)<<endl;
cout<<"\ta="<<a<<endl;
}
}
输出结果是
a=4
BAND(++a)=0
a=5
a=5
BAND(++a)=8
a=8
a=6
BAND(++a)=9
a=9
为什么第二次调用宏a变得这么大啊,求高手解答
------解决方案--------------------
短路问题
第一次4+1>5不成立,表达式后面的都不做了, 自加只执行一次
后两次5+1>5成立, 自加执行三次
------解决方案--------------------
宏中你每个X都被替换成++a 阿
程序如下:
#define BAND(x) (((x)>5&&x<10)?(x):0)
void main()
{
for(int i=4;i<7;i++)
{
int a=i;
cout<<"a="<<a<<endl<<'\t';
cout<<"BAND(++a)="<<
BAND(++a)<<endl;
cout<<"\ta="<<a<<endl;
}
}
输出结果是
a=4
BAND(++a)=0
a=5
a=5
BAND(++a)=8
a=8
a=6
BAND(++a)=9
a=9
为什么第二次调用宏a变得这么大啊,求高手解答
------解决方案--------------------
短路问题
第一次4+1>5不成立,表达式后面的都不做了, 自加只执行一次
后两次5+1>5成立, 自加执行三次
------解决方案--------------------
宏中你每个X都被替换成++a 阿