macros caused troubles...

acange 2001-07-21 06:41:10
最近在看 C++ 的书, 在讲到不要用 宏, 要用inline funtion 时给出了一个例子。

#define max(a,b) ((a) > (b) ? (a):(b))
...
下面的例子有bugs:
int a=5, b=0;
max(++a,b); //a is incremented twice
max(++a,b+10); //a is incremented once
....

哪位能分析一下为何 max(++a,b); //a 加2次
max(++a,b+10) //a 加1次

谢谢

...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bnwxf 2001-07-23
  • 打赏
  • 举报
回复
谢谢你,acange,this is my first ten score:-)
bnwxf 2001-07-22
  • 打赏
  • 举报
回复
前几天我刚问过一个相关的问题,把答案写在这里:
再编译的时候,可以用-E参数,这样只执行预处理一个步骤。
就可以看到替换出来的代码。给个例子:
g++ test.cxx -E -o testcode -I./include -I../include
生成的代码就在testcode文件里面。
查查你所用的编译器的手册,应该有类似的参数。
Flymouse 2001-07-21
  • 打赏
  • 举报
回复
a=5 ++a=6 a>b 所以返回前一个表达式 (++a)
b+10=10 ++a=6 < b+10 所以返回表达式 (b+10),而不再计算前面的(++a)

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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