在 C++ 中可选地包含头文件

Include header files optionally in C++

我有一个 C++ 代码需要在某些服务器中包含某个库,而在其他服务器中则不需要。我使用 bjam 构建我的代码。

代码示例:

if server in server_list:
   include <header-file.h>
   int function();
else:
   int function();

并且在构建期间使用 bjam:

if server in server_list:
    -llibrary
else:
   ...

包含头文件是编译时间 activity 而不是 运行 时间。所以你不能使用 if 条件相同

使用#ifdefs

#define SERVER_IN_LIST

#ifdef SERVER_IN_LIST
    #include<...>
#endif

在 C 和 C++ 中,任何以 # 开头的行都是 pre-processor 指令 。预处理器是一个文本解析器,它在编译源代码文件之前对其进行解析。它理解特定的指令,例如 #include#define#ifdef ,但它会将普通的 C++ 代码视为文本。因此,您不能使用普通的 C++ 代码来改变预处理器指令的解释。

我们来看一个例子:

if (x == 4){
    #include "x4.h"
}

以上是错误的,因为 if 语句及其大括号是 C++ 代码的一部分,因此将被预处理器忽略。预处理器将直接解释 #include 指令,这将导致 x4.h 的内容被粘贴到文件中的那个位置。

正确的写法是使用条件预处理器指令,例如 #if#ifdef。例如...

#ifdef INCLUDE_X4
#    include "x4.h"
#endif

请注意,此代码中的缩进是可选的。

可以找到有关预处理器指令的更多信息here