c++ - 是否有可能 #include 失败而不中止编译?

标签 c++ c

我有一组松散相关的头文件库,我想让它们在不紧密耦合的情况下协同工作。我想到的一种方法是尝试包含其他头文件,如果找到它们,那么我可以相应地生成代码。所以也许我会在 vector.hh 中有一个 vector 类:

#ifndef __VECTOR_HH__
#define __VECTOR_HH__

bunch of vector-y stuff

#endif

然后在另一个文件 coordinates.hh 中(假设它进行坐标转换):

#ifndef __COORDINATES_HH__
#define __COORDINATES_HH__
#include <vector.hh>

class SomeCoordinateType {
#ifdef __VECTOR_HH__
    operator vector() { <convert to vector> }
#endif
}

#endif

用户获取他们需要的任何头文件的想法。如果他们获取了 vector.hh header 和 coordinates.hh,那么我将为他们创建转换运算符,否则我不会创建。这一切都取决于能否让 #include 指令在失败时不产生 fatal error 。有什么办法吗?

最佳答案

一种典型的方法是使用一个小型配置工具来生成自定义“config.h”(显然使用您认为合适的名称),其中仅包含他们选择的配置所需的其他 header 。

另一种可能性是让 config.h 有条件地包含其他 header ,并让您的配置工具生成合适的 makefile,通过定义(或不​​定义)控制这些包含的宏来启用功能。通常,您将有一个定义实际依赖项的主生成文件,并且只生成一个小文件以包含类似以下内容的行:

特征 = -DCOORDS -DVECTOR

CFLAGS = $(特征)-O2

...然后将其包含到您的主生成文件中以获取在编译期间定义的那些值,从而启用依赖于它们的功能。然后在你的标题中,你会有类似的东西:

// coordinates.h
#ifdef VECTOR
#include <vector>
#endif

// ...
class coordinate {
   #ifdef VECTOR
       operator vector() { /* ... */ }
   #endif
};

但是,我会努力避免让你的代码到处都是 #ifdef,尤其是嵌套到需要长时间仔 segmentation 析才能弄清楚类具有哪些功能的程度任何给定的特征组合是否被定义。

关于c++ - 是否有可能 #include 失败而不中止编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592961/

相关文章:

c++ - 6 字节 MACID 的表示

c++ - 二进制文件在 Windows 上比在 Linux 上小

c - while 循环中的 raise()

C程序没有给出正确的输出

c - C什么时候释放静态分配的变量声明

c - 如何在 OpenCL 中将元素添加到数组末尾?

c++ - 为什么 sizeof 表达式不是 2、4、8 等编译时常量?

c++ - 使用 QMake 为单个文件指定编译器标志

c++ - 有没有办法在 c++ 和 winapi 中获得 native 分辨率?

java - 在 Java 中使用 FUSE 库;尝试复制 hello.c 示例