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

时间:2016-09-28 08:21:52

标签: c++ build c-preprocessor bjam

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

代码示例:

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

使用bjam构建时:

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

2 个答案:

答案 0 :(得分:1)

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

使用#ifdefs

#define SERVER_IN_LIST

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

答案 1 :(得分:0)

在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