【问题标题】:Include header files optionally in C++在 C++ 中可选地包含头文件
【发布时间】:2017-02-06 02:23:58
【问题描述】:

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

代码示例:

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

在使用 bjam 构建期间:

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

【问题讨论】:

  • 只在特定服务器上运行时如何定义?
  • @Rajs123 如果您在需要不同库的不同服务器上运行,则需要构建不同的可执行文件,或者使用您根据需要加载的 DLL。 (我怀疑你在 Python 中期待类似于 import 的东西。C++ 不能那样工作。)
  • 我擅长构建不同的可执行文件,但是我需要在 Jam 文件中提及这一点。该怎么做?

标签: c++ build c-preprocessor bjam


【解决方案1】:

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

使用#ifdefs

#define SERVER_IN_LIST

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

【讨论】:

  • 如果在 Jam 文件中,如何指定这个?
【解决方案2】:

在 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找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多