新微赢技术网

标题: 内联函数和宏定义的作用是否相同? [打印本页]

作者: √龙    时间: 2009-11-4 00:46
标题: 内联函数和宏定义的作用是否相同?
内联函数和宏定义的作用是否相同?
作者: ぱホ    时间: 2009-11-4 00:46
怎么可能相同!
举个例子:计算两个对象的最大值
宏定义:#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++这本书做的笔记.
作者: 妈妈猪的一天    时间: 2009-11-4 00:46
估计他是问在内存和编译的成面上的问题..是问是不是都是直接的代码替换..
作者: ■■■■■■    时间: 2009-11-4 00:46
是的 主要 是想问问 在内存上 占的空间问题
还有就是 它们被执行时的时间是否相等
除了 宏在编译时 不可见外 是不是和内联没什么区别?
作者: 蓝血腥人    时间: 2009-11-4 00:46
意义上当然不相同,但是在编译为机器指令后的代码是否相同就不太清楚了




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2