在探索源包时,我发现一些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__
之间有区别吗?
答案 0 :(得分:3)
嗯,您无法在代码中直接使用宏,如:
if ( _WIN32 ) {
...
}
例如,在Linux上因为它没有被定义所以它们只是将宏映射到布尔表达式。
最后,它确实是一种风格决定......他们当然可以做到:
#ifdef _WIN32
...
#endif
答案 1 :(得分:3)
假设定义了宏,使用if..else
语句优于#if
.. #else
指令的优点是所有代码路径都是在第一种情况下编译的,所以如果有编译编译器能够在所有代码路径中看到它们的错误。当然,这并不总是可行的,因为一些代码路径可能是依赖于平台的代码。
答案 2 :(得分:1)
除了已经编写的内容之外,它还是另一层抽象。例如,如果_WIN32
的语法发生更改,或者您希望在不依赖于标志的情况下显式编译Windows,则必须更改完整代码,以防直接使用_WIN32
。在这种情况下,您只需更改预处理程序指令。
答案 3 :(得分:0)
使用此和简单定义(如_WIN32或 linux )之间是否存在差异?
不,这是一个简单的宏滥用。