内联函数

时间:2010-09-16 13:25:24

标签: c++ macros inline

  

可能重复:
  Inline functions vs Preprocessor macros

你好,有人可以解释它到底意味着什么,和常规宏有什么区别(我知道它在编译时工作而不是预处理器但是那又怎样?)提前感谢任何帮助,看看谷歌但是没找到可以理解的东西

2 个答案:

答案 0 :(得分:1)

(假设你在谈论C / C ++。)

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

使用内联函数而不是宏来实现这一点的一个重要原因是宏语言比实际的C / C ++代码弱得多;编写可理解,可重用,无错误的宏更难。宏不会创建词法范围,因此一个中的变量可能会与已使用它的范围内的变量发生冲突。它不会对其参数进行类型检查。引入意外的语法错误很容易,因为所有宏都基本上是搜索和替换。

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

或者,用更加自以为是的简短方式对此进行改写:宏(在C / C ++中,而不是Lisp方言)是一个糟糕的问题,内联函数让你不用它们。

另外,请记住,将函数标记为内联通常不是一个好主意。编译器通常会按照他们认为合适的内联或不内联;通过标记内联函数,你将接管一个低级函数的责任,大多数时候,编译器会比你更了解它。

答案 1 :(得分:1)

macrosinline functions之间存在很大差异:

  • 内联只是对编译器的一个提示 该函数可能是内联的。它 并不保证会这样。
  • 编译器可能不会内联函数 标有内联。
  • 宏调用不执行 类型检查,因此宏不是类型 安全
  • 使用函数而不是宏 更有可能给你一个好的和 可理解的编译器输出 如果有一些错误。
  • 调试功能更容易, 使用宏会使调试变得复杂 许多。大多数编译器会给你一个 启用或禁用选项 内联,这是不可能的 宏。

C ++中的一般规则是应尽可能避免使用宏。