c++ - 可以使用 C 预处理器来判断文件是否存在吗?

标签 c++ include c-preprocessor

我有一个非常大的代码库(阅读:数千个模块),其中的代码在许多项目中共享,这些项目都运行在具有不同 C++ 编译器的不同操作系统上。不用说,维护构建过程可能是一件苦差事。

如果有办法让预处理器忽略某些 #includes,代码库中有几个地方会大量清理代码。如果当前文件夹中不存在该文件。有谁知道实现这一目标的方法吗?

目前,我们使用 #ifdef周围#include在共享文件中,带有第二个特定于项目的文件,该文件 #defines 是否 #include存在于项目中。这有效,但它很丑。人们在从项目中添加或删除文件时经常忘记正确更新定义。我已经考虑编写一个预构建工具来保持这个文件是最新的,但是如果有一种独立于平台的方式来使用预处理器来做到这一点,我宁愿这样做。有什么想法吗?

最佳答案

小更新

某些编译器可能支持 __has_include ( header-name )

扩展名已添加到 C++17 standard (P0061R1)。

编译器支持

  • 叮当
  • 来自 5.X 的 GCC
  • VS2015 Update 2 中的 Visual Studio (?)

示例(来自 clang 网站):

// Note the two possible file name string formats.
#if __has_include("myinclude.h") && __has_include(<stdint.h>)
# include "myinclude.h"
#endif

来源

关于c++ - 可以使用 C 预处理器来判断文件是否存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/142877/

相关文章:

c++ - 在预处理器表达式中取消引用字符串

c++ - cin 和 getline 跳过输入

没有 new 关键字和使用指针的 C++ 对象初始化

c++ - Caffe C++ - 访问其他层中的数据

php - 将变量包含到 html 标题

c - 将预处理器指令嵌入到函数名称中

c++ - 使用符号常量声明数组时遇到问题

python - 在 Python 包中包含 *.pyd 文件

c++ - 多小类分布

c++ - 代码复杂度指标和 ifdef