我有一个C ++代码,需要在某些服务器中包含某个库,而不是在其他服务器中。我使用bjam构建我的代码。
代码示例:
if server in server_list:
include <header-file.h>
int function();
else:
int function();
使用bjam构建时:
if server in server_list:
-llibrary
else:
...
答案 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。