C ++在编译时是否支持全局标头?

时间:2016-11-02 21:15:59

标签: c++ compiler-errors c-preprocessor header-files

在尝试编译外部提供的C ++代码库时,我遇到了一个令人困惑的问题:

缺少几个头文件#include <MyLibrary.h>,其中MyLibrary是一个明显缺失的明显依赖,并阻止编译。

我的问题是: 在编译C ++代码时,有没有办法自动包含依赖头文件,而不需要在每个需要它的.h / .cpp文件中包含它?换句话说,一种为C ++预处理器提供头文件列表的方法,以便在编译所有源代码时自动包含这些文件?

我知道这可能是一个非常糟糕的主意,但是我正在尝试确定我提供的代码是否被破坏,或者是否有某种方式可以编译它而无需手动修复缺少依赖项的每个文件

2 个答案:

答案 0 :(得分:3)

C ++语言标准不支持&#34;全局标题&#34;,但个别编译器会这样做。

它被称为强制包含

使用Visual C ++,它是/FI选项,而使用g ++,它是-include选项。

但是,使用Visual C ++,包含公共标头的常用方法是将这些包含放在名为stdafx.h的文件中,并首先在每个翻译单元中包含该文件。这是Visual C ++预编译头文件支持的一部分。这是有问题的,因为当它打开时(默认情况下它在Visual Studio项目中启动)它会改变预处理规则,以便某些标准代码可能无法编译,但它可以加速更大的构建。

答案 1 :(得分:2)

是的,至少使用gcc和兼容性:使用-include选项。请参阅https://stackoverflow.com/a/3387518/3150802