哪个是更快的内联函数或宏

Which is faster inline function or MACRO

本文关键字:函数      更新时间:2023-10-16

我相信预处理器在编译之前将宏扩展为代码中的复制文本,无论在哪里调用它,而编译器在每个函数调用中写入编译函数定义的副本。因此,在这两种情况下,我们都避免了常规函数调用的开销,但在这种情况下,内联函数还是宏哪个更快,开销更少?

宏只会"更快",因为它不会留给编译器启发式来判断宏是否会内联。鉴于宏的缺点,通常最好将此决定留给编译器。调试级别和相应的源代码也存在问题。优化级别,"强制"内联,例如__attribute__ ((__always_inline__))(gcc/clang)。更重要的是,您可以避免常见的陷阱,例如宏中的多个表达式扩展/评估。

我还没有做过 SO 问题搜索(你应该养成这样做的习惯),但我怀疑这在很久以前就已经回答过了,而且更详细!