注册 登录
编程论坛 C++教室

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

newyj 发布于 2008-05-28 13:57, 1174 次点击
内联函数和宏定义的作用是否相同?
8 回复
#2
zjl1382008-05-28 15:45
怎么可能相同!
举个例子:计算两个对象的最大值
宏定义:#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
sunkaidong2008-05-28 15:55
估计他是问在内存和编译的成面上的问题..是问是不是都是直接的代码替换..
#4
newyj2008-05-28 17:01
是的 主要 是想问问 在内存上 占的空间问题
还有就是 它们被执行时的时间是否相等
除了 宏在编译时 不可见外 是不是和内联没什么区别?
#5
flyue2008-05-28 18:26
意义上当然不相同,但是在编译为机器指令后的代码是否相同就不太清楚了
#6
flyue2008-05-28 18:26
在某些时候(比如函数),内联比宏更好用
#7
newyj2008-05-29 12:29
回复 6# flyue 的帖子
能否说一下  内联比宏好在什么地方吗
#8
中学者2008-05-29 14:39
宏只是简单的文本替换......所以副作用可能会很多.......内联函数比宏更安全.....
#9
p1s2008-05-29 19:50
内联函数是函数
宏只是简单的替换和扩展,基本上没有什么安全机制。
1