首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联函数

内联函数
EN

Stack Overflow用户
提问于 2010-09-16 13:25:24
回答 2查看 346关注 0票数 2

可能重复: 内联函数与预处理宏

你好,有人能解释一下它到底是什么意思吗?和普通宏有什么区别(我知道它在编译时工作,而不是预处理,但又怎样?)提前感谢你的帮助,在谷歌上找了一下,但没有找到可以理解的东西。

EN

回答 2

Stack Overflow用户

发布于 2010-09-16 13:37:51

(假设这里是指C/C++。)

内联函数将其代码复制到调用它的点,就像宏一样。

使用内联函数而不是宏来实现这一点的主要原因是宏语言比实际的C/C++代码弱得多;编写可理解的、可重用的、无big的宏要困难得多。宏不会创建词法作用域,因此一个宏中的变量可以与已经在其使用范围内的变量发生冲突。它不打-检查它的论点。它很容易引入意想不到的语法错误,因为所有宏所做的基本上是搜索和替换。

此外,IIRC,编译器可以选择忽略一个内联指令,如果它认为这是愚蠢的;它不能用一个宏。

或者,用一种更加固执己见和简短的方式重新表述这一点:宏(在C/C++中,而不是,比如说Lisp方言中)是一种可怕的杂念,内联函数允许您不使用它们。

另外,请记住,将函数标记为内联通常不是一个好主意。编译器通常会以他们认为合适的方式内联或不内联;通过在内联中标记一个函数,您将接管一个低级函数的责任,而在大多数情况下,编译器将比您更了解这个函数。

票数 1
EN

Stack Overflow用户

发布于 2010-09-16 13:40:03

内联函数有很大的区别

  • 内联只是对编译器的提示,说明函数可能是内联的。但这并不保证一定会发生。
  • 编译器可能没有内联标记的内联函数。
  • 宏调用不执行类型检查,因此宏不是类型安全的。
  • 使用函数而不是宏更有可能为您提供一个很好的、可以理解的编译器输出,以防出现错误。
  • 更容易调试函数,使用宏会使调试变得非常复杂。大多数编译器将为您提供启用或禁用内联的选项,这在宏中是不可能的。

C++中的一般规则是,只要可能,就应该避免宏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3727095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档