在 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。
我有一个 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。