0

可能重复:
内联函数与预处理器宏

C++ 中引入了内联函数来替换 C 风格的宏(#define 宏名...),但我仍然看到很多 C++ 代码使用旧的 C 风格的宏而不是内联函数,内联函数是否不如旧的 C 风格的宏?

4

3 回答 3

4

我会说宏不如内联函数。

内联函数是类型安全的,而宏不是。这是他们最大的优势。编译器正在帮助您编写更好的代码。

话虽如此,宏可以做一些函数不能做的事情。不过这样的东西并不多...

我相信 C 程序员已经习惯了宏并且只是将他们的习惯延续到 C++ 中。

于 2011-04-12T12:56:20.660 回答
0

我能想象的唯一仍然使用宏的事情之一是将LINEFILE宏合并到日志语句中

例如:

#DEFINE TRACE(S) vGenericLogStatement(__FILE__,__LINE__, s)

vGenericLogStatement 的定义类似于:

void vGenericLogStatement(char* fileName, int line, char* traceMesg);

它们也是有用的快速和肮脏的字符串连接。

于 2011-04-12T12:57:15.803 回答
0

我不会说他们低人一等。在 C++ 中,你可以用宏做的事情并不多,你不能用内联函数或模板获得相同的效果。我唯一能想到的是 '#' stringize 宏操作符,如果 Boost 也有办法做到这一点,我也不会感到惊讶。

然而,当涉及到常量时,宏可以有一个优势——它们通常不会占用任何数据空间,而是直接写入指令流。在内存占用较小的系统上,这可能是一个主要考虑因素。

于 2011-04-12T13:00:01.560 回答