设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 514|回复: 4
打印 上一主题 下一主题

内联函数和宏定义的作用是否相同?

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:46:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
内联函数和宏定义的作用是否相同?
2#
发表于 2009-11-4 00:46:03 | 只看该作者
怎么可能相同!
举个例子:计算两个对象的最大值
宏定义:#define max(a,b) ((a) > (b) ? (a) : (b))
无论什么时候你写了象这样的宏,你必须记住在写宏体时对每个参数都要加上括号;否则,别人调用你的宏时如果用了表达式就会造成很大的麻烦。但是即使你象这样做了,还会有象下面这样奇怪的事发生:

int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次

这种情况下,max内部发生些什么取决于它比较的是什么值!

而用内联就不会:
inline int max(int a, int b) { return a > b ? a : b; }

上面是我看effective C++这本书做的笔记.
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 00:46:04 | 只看该作者
估计他是问在内存和编译的成面上的问题..是问是不是都是直接的代码替换..
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 00:46:04 | 只看该作者
是的 主要 是想问问 在内存上 占的空间问题
还有就是 它们被执行时的时间是否相等
除了 宏在编译时 不可见外 是不是和内联没什么区别?
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 00:46:05 | 只看该作者
意义上当然不相同,但是在编译为机器指令后的代码是否相同就不太清楚了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 00:34 , Processed in 0.163777 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表