【问题标题】:inline functions [duplicate]内联函数[重复]
【发布时间】:2011-04-13 05:29:52
【问题描述】:

可能重复:
Inline functions vs Preprocessor macros

你好,有人可以解释一下它到底是什么意思,与常规宏有什么区别(我知道它在编译时工作,而不是预处理器,但那又​​如何?)提前感谢您的帮助,在谷歌中查看但没找到可以理解的东西

【问题讨论】:

  • 你在说什么语言? VBA?

标签: c++ macros inline


【解决方案1】:

(假设您在这里谈论的是 C/C++。)

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

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

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

或者,用一种更固执、更简短的方式重新表述:宏(在 C/C++ 中,而不是 Lisp 方言中)是一个糟糕的组合,内联函数让你不能使用它们。

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

【讨论】:

    【解决方案2】:

    macros和inline functions有很大区别:

    • 内联只是对编译器的提示 该函数可能是内联的。它 不保证一定会。
    • 编译器可能不内联函数 用 inline 标记。
    • 宏调用不执行 类型检查,所以宏不是类型 安全。
    • 使用函数而不是宏是 更有可能给你一个好的和 可理解的编译器输出 万一出现错误。
    • 更容易调试功能, 使用宏使调试复杂化 很多。大多数编译器会给你一个 启用或禁用选项 内联,这是不可能的 宏。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-18
      • 2013-08-28
      • 1970-01-01
      • 2017-05-04
      • 2017-09-02
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多