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