繁体   English   中英

可选地在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:
   ...

包含头文件是编译时活动,而不是运行时。 因此,如果条件相同

使用#ifdefs

#define SERVER_IN_LIST

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

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

让我们看一个例子:

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

上面的方法是错误的,因为if语句及其花括号是C ++代码的一部分,因此预处理器将忽略它们。 预处理程序将直接前进并解释#include指令,这将导致x4.h的内容粘贴到文件中的该位置。

编写此代码的正确方法是使用条件预处理器指令,例如#if#ifdef 例如...

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

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

有关预处理器指令的更多信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM