c++编程思想中的关于宏的一个问题

terry19841209 2008-03-17 10:47:28
程序如下:
#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变得这么大啊,求高手解答
...全文
70 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
terry19841209 2008-03-17
  • 打赏
  • 举报
回复
7楼一针见血。。。
paidfighting 2008-03-17
  • 打赏
  • 举报
回复
不要使用就是了,一条语句里的多个++本身就是无定义的

不要研究这种问题。。。
stecdeng 2008-03-17
  • 打赏
  • 举报
回复
宏中你每个X都被替换成++a 阿
HelloDan 2008-03-17
  • 打赏
  • 举报
回复
在Macro里面这样用是很危险的,不要这样用++和--的。
terry19841209 2008-03-17
  • 打赏
  • 举报
回复
我一直不明白的就是为什么会调用3次++,各位大大能不能解释得再详细一点啊,我是小白。。。
stecdeng 2008-03-17
  • 打赏
  • 举报
回复
使用宏就是怕遇见出现多个++的情况
出现编程者不预料的结果
避免就好了
Supper_Jerry 2008-03-17
  • 打赏
  • 举报
回复
第二次调用++了三次当然是8了
taodm 2008-03-17
  • 打赏
  • 举报
回复
同一行语句里多个++后,求值顺序不确定,结果是“未定义”(C++标准明确规定的)
不要写出如此代码,也没太多可以值得深入探讨的。
freshui 2008-03-17
  • 打赏
  • 举报
回复
短路问题
第一次4+1>5不成立,表达式后面的都不做了, 自加只执行一次
后两次5+1>5成立, 自加执行三次

65,013

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧