【发布时间】:2014-06-12 14:00:38
【问题描述】:
在探索源代码包时,我发现一些 if 语句是由预处理器指令定义的,然后在代码中使用,如下例所示:
#ifdef _WIN32
#define OSisWindows() true
#define OSisLinux() false
#elif defined(__linux__)
#define OSisLinux() true
#define OSisWindows() false
#endif
if ( OSisWindows() )
{
// do something
}
if ( OSisLinux() )
{
// do something else
}
使用这个和像_WIN32 或__linux__ 这样的简单定义有区别吗?
【问题讨论】:
-
Eww,他们只是想模仿功能,但
bool OSisWindows() {return true;}也可以。 -
真正的函数实际上会更好地工作:如果我没记错的话,在参数列表括号之前放置空格(应该允许)将导致宏标记无法匹配。
-
@chris:如果这些特定函数被大量使用,那么它可能会影响性能,因为函数调用本身会占用一些资源。当然,您可以直接使用
inline,这也不是问题。 -
@wolfPack88,没有机会。无论有没有明确的
inline,优化器都会跳过它。 -
@FrédéricHamidi:您可以调用类似函数的宏,在名称和左括号之间使用空格。你只是不能定义一个这样的。为了防止“调用”上的宏扩展,您需要用括号括住名称:
(OSisWindows)()
标签: if-statement c-preprocessor preprocessor-directive