【发布时间】:2011-04-13 05:29:52
【问题描述】:
你好,有人可以解释一下它到底是什么意思,与常规宏有什么区别(我知道它在编译时工作,而不是预处理器,但那又如何?)提前感谢您的帮助,在谷歌中查看但没找到可以理解的东西
【问题讨论】:
-
你在说什么语言? VBA?
你好,有人可以解释一下它到底是什么意思,与常规宏有什么区别(我知道它在编译时工作,而不是预处理器,但那又如何?)提前感谢您的帮助,在谷歌中查看但没找到可以理解的东西
【问题讨论】:
(假设您在这里谈论的是 C/C++。)
内联函数将其代码复制到调用它的位置,就像宏一样。
您将使用内联函数而不是宏来完成此操作的主要原因是宏语言比实际的 C/C++ 代码弱得多;编写可理解的、可重用的、无错误的宏更难。宏不会创建词法范围,因此其中的变量可能会与已经在使用它的范围内的变量发生冲突。它不对参数进行类型检查。很容易引入意外的语法错误,因为宏所做的基本上就是搜索和替换。
另外,IIRC,如果编译器认为内联指令真的很愚蠢,它可以选择忽略它;它不能用宏来做到这一点。
或者,用一种更固执、更简短的方式重新表述:宏(在 C/C++ 中,而不是 Lisp 方言中)是一个糟糕的组合,内联函数让你不能使用它们。
另外,请记住,将函数标记为内联通常不是一个好主意。编译器通常会按照他们认为合适的方式内联或不内联;通过将函数标记为内联,您将接管低级函数的责任,大多数时候编译器会比您了解更多。
【讨论】:
macros和inline functions有很大区别:
C++ 中的一般规则是尽可能避免使用宏。
【讨论】: