菜问题:内联函数和宏定义的区别

verlongan 2005-01-16 11:03:31
书上说,宏传给它什么值,它就返回什么值,而内联则不然,你传给任何它什么,都转换为int,再返回int,其结果可能截断或精度丢失,这是样的吗?我试了一样,不像书上所说的,给我例子帮我解释一下吧,谢谢。
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
verlongan 2005-01-16
  • 打赏
  • 举报
回复
我也这样想,但 《C++程序设计语言教程》--麦中凡 第58页倒数这二段这是这样说的。
liem 2005-01-16
  • 打赏
  • 举报
回复
宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体
inline函数是函数,但在编译中不是单独产生代码,而是将有关代码嵌入到调用处
fatalerror99 2005-01-16
  • 打赏
  • 举报
回复
宏在替换的时候只是简单的文字替换,不对参数类型进行检查,而内联函数则需要进行参数类型检查。
bianliuwei 2005-01-16
  • 打赏
  • 举报
回复
宏是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。

至于楼主说的问题,小弟才疏学浅,没接触过,学习......
fatalerror99 2005-01-16
  • 打赏
  • 举报
回复
内联只是在编译时将函数代码嵌入调用处,其他与其它函数没有区别,没有楼主说的这种性质,楼主可能记错了或理解错了。

《C++ 程序设计语言》中有一段关于宏的叙述很有启发性:
宏在 C 语言里极其重要,而在 C++ 里用得就少多了。关于宏的第一规则是:绝不应该去使用它,除非你不得不这样做。几乎每个宏都表明了程序设计语言里,或者程序里,或者程序员的一个缺陷,因为它将在编译器看到程序的正文之前去重新摆布这些正文。宏也是许多程序设计工具的主要麻烦。所以,如果你使用了宏,你就应该准备着只能从各种工具(如排错系统、交叉引用系统、轮廓程序等)得到较少的服务。
verlongan 2005-01-16
  • 打赏
  • 举报
回复
对不起,我再研究下去,原来书上是这样写的
inline fac(float i) {return i * i);//没有写返回值的。

printf("bb= %d", fact(8.2));//调用

唉,这样的书,作为教材用,有点误人子弟。
playmud 2005-01-16
  • 打赏
  • 举报
回复
因为不是,所以无法举例.怎么会丢失呢,木有道理啊.
greenteanet 2005-01-16
  • 打赏
  • 举报
回复
宏不进行类型的检查,但是内联函数要进行检查.
楼主说的那些我没有见过,也许我见得少.

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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