在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:
...
头文件包含是编译时活动,而不是运行时活动。所以你不能对相同的
使用if条件使用# ifdef#define SERVER_IN_LIST
#ifdef SERVER_IN_LIST
#include<...>
#endif
在C和c++中,任何以#
开头的行都是预处理器指令。预处理器是一个文本解析器,它在编译源代码文件之前对其进行解析。它理解特定的指令,如#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
请注意,代码中的缩进是可选的。
关于预处理器指令的更多信息可以在这里找到
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 如何为包含头文件的目标编写生成文件?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 在生成文件先决条件中包含头文件的原因
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 在 PostgreSQL C 扩展中包含头文件
- 是否可以在C++中以间接方式包含头文件
- 是否需要包含头文件?
- 我收到未声明的标识符错误,但我已包含头文件?
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序
- 如何在C++中包含头文件时错误地重载
- 我在C++中无效使用不完整的类型类错误,如何正确包含头文件?
- 虚幻引擎4.16,C++包含头文件
- C++多次包含头文件
- 令牌之前的预期类名 '{' - 包含头文件和 CPP 文件
- 在.cpp中包含头文件会导致令人讨厌的错误
- 如何列出用于在Qt项目中包含头文件的所有路径
- 尽管包含头文件,但仍找不到嵌套命名空间