c - 您如何包含可能存在或可能不存在的头文件?

标签 c gcc include header-files

假设我在 foo.h 中定义了 BAR。但是 foo.h 可能不存在。我该如何包含它,而不让编译器向我提示?

#include "foo.h"

#ifndef BAR
#define BAR 1
#endif

int main()
{
    return BAR;
}

因此,如果在 foo.h 中将 BAR 定义为 2,则如果 foo.h 存在则程序返回 2,如果 foo.h 不存在则返回 1。

最佳答案

一般来说,你需要做一些外部的事情来做到这一点 - 例如通过做一些事情,比如玩弄搜索路径(如评论中所建议的)并提供一个空的 foo.h 作为后备,或者将 #include 包装在 #ifdef HAS_FOO_H...#endif 并通过编译器开关设置 HAS_FOO_H(-DHAS_FOO_H 用于 gcc/clang 等.).

如果您知道您正在使用特定的编译器,并且可移植性不是问题,请注意一些编译器确实支持包含一个可能存在或可能不存在的文件作为扩展名。例如,请参阅 clang 的 __has_include功能。

关于c - 您如何包含可能存在或可能不存在的头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569659/

相关文章:

c - 图片 18F45K42 : How to combine 4 bytes to Int?

c++ - 在 fedora 27 中构建 glfw 时链接期间出错

build - 构建Docker镜像时,包含文件的默认位置是什么?

php - 使用根目录之外的 php 文件的 HTML 表单操作?

c - 将字符串和字符传递给函数

c++ - 未使用的功能会被优化吗?

c++ - is_lock_free() 在升级到 MacPorts gcc 7.3 后返回 false

linux - 交叉编译和CMake?

c++ - 您是否需要显式包含其他 header 已包含的 header ?

c - 在没有 malloc、brk 或 mmap 的情况下,BareMetalOS 如何在 Assembly 中分配内存?