C语言中宏的问题

追求执着 2011-09-01 05:08:25
代码:

#include <iostream>
using namespace std;

define MAX(a,b) ((a) > (b) ? (a) : (b))

int main()
{
int a = 10;
int b = 8;
MAX(++a,b); //MAX(++a,b+10);
cout<<a<<endl;
cout<<b<<endl;
return 0;
}


现在答案是这样的,
a = 12; 这里为什么会a是12呢???
b = 8
还有就是改成注释中的代码之后
a = 11;
b = 8;
但是如果把b+10修改成b+1,a = 12了,麻烦解释一下,谢谢
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kingstar158 的回复:]

引用 3 楼 shi3590 的回复:
1L回答完了,宏只是简单的替换,建议用inline

嗯,能解释一下inline直接运用在这里的意义吗?
[/Quote]
inline void MAX(a,b) { return a > b ? a : b; }
你++a传给MAX, inline的情况下, 跟宏不一样的:
展开可能类似这样:
++a;
max = a > b ? a : b;
追求执着 2011-09-01
  • 打赏
  • 举报
回复
恩 明白了,可以结贴了!!!
追求执着 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shi3590 的回复:]
1L回答完了,宏只是简单的替换,建议用inline
[/Quote]
嗯,能解释一下inline直接运用在这里的意义吗?
wjjjuniniho 2011-09-01
  • 打赏
  • 举报
回复
宏就是简单的替换
代码变成:
(++a)> (b)?(++a):b;
a自增两次,就是12了

后面那个原理一样:
(++a)>(b+10)?(++a):(b+10);
a自增一次为11,b依然是8

(++a)>(b+1)?(++a):(b+1);
a自增两次为12
坏男孩 2011-09-01
  • 打赏
  • 举报
回复
正解[Quote=引用楼主 kingstar158 的回复:]
代码:
C/C++ code

#include <iostream>
using namespace std;

define MAX(a,b) ((a) > (b) ? (a) : (b))

int main()
{
int a = 10;
int b = 8;
MAX(++a,b); //MAX(++a,b+10);
cout<<a<<endl;……
[/Quote]
追求执着 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenxwzcc 的回复:]
程序编译后,宏已经被替换了,MAX(++a,b) 变成((++a) > (b) ? (++a) : (b));
三目运算符从左至右执行,a先++一次变成11,11>8,所以返回++a,就变成12;

换成注释中的程序,a先++一次变成11,11<8+10,所以就返回b的值,为8;

换成b+1后,a先++一次变成11,11>8+1,所以返回++a,还是12.
[/Quote]
嗯,一时给搞蒙了,没有具体分析,谢谢
shi3590 2011-09-01
  • 打赏
  • 举报
回复
1L回答完了,宏只是简单的替换,建议用inline
xiaoguangzaia 2011-09-01
  • 打赏
  • 举报
回复
define MAX(a,b) ((a) > (b) ? (a) : (b))如果a>b为真返回a否则返回b

当a是12的两种情况
a>b是真,这时候会返回a
这样在宏里面计算了两次a

另一种情况a<b返回b不计算a,对a只求了一次
猫xiaowai 2011-09-01
  • 打赏
  • 举报
回复
程序编译后,宏已经被替换了,MAX(++a,b) 变成((++a) > (b) ? (++a) : (b));
三目运算符从左至右执行,a先++一次变成11,11>8,所以返回++a,就变成12;

换成注释中的程序,a先++一次变成11,11<8+10,所以就返回b的值,为8;

换成b+1后,a先++一次变成11,11>8+1,所以返回++a,还是12.

69,382

社区成员

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

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