| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1170 人关注过本帖
标题:内联函数和宏定义的作用是否相同?
只看楼主 加入收藏
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
 问题点数:0 回复次数:8 
内联函数和宏定义的作用是否相同?
内联函数和宏定义的作用是否相同?
搜索更多相关主题的帖子: 内联 函数 定义 
2008-05-28 13:57
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
怎么可能相同!
举个例子:计算两个对象的最大值
宏定义:#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++这本书做的笔记.

i like linux...
2008-05-28 15:45
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
估计他是问在内存和编译的成面上的问题..是问是不是都是直接的代码替换..

学习需要安静。。海盗要重新来过。。
2008-05-28 15:55
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
是的 主要 是想问问 在内存上 占的空间问题
还有就是 它们被执行时的时间是否相等
除了 宏在编译时 不可见外 是不是和内联没什么区别?
2008-05-28 17:01
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
意义上当然不相同,但是在编译为机器指令后的代码是否相同就不太清楚了

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-05-28 18:26
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
在某些时候(比如函数),内联比宏更好用

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-05-28 18:26
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
回复 6# flyue 的帖子
能否说一下  内联比宏好在什么地方吗
2008-05-29 12:29
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
宏只是简单的文本替换......所以副作用可能会很多.......内联函数比宏更安全.....

樱花大战,  有爱.
2008-05-29 14:39
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
内联函数是函数
宏只是简单的替换和扩展,基本上没有什么安全机制。
2008-05-29 19:50
快速回复:内联函数和宏定义的作用是否相同?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017966 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved