c - 有没有办法检测文件依赖项何时满足 "accidentally"?

标签 c header include

假设有三个 header AAA.hBBB.hMyLib.hMyLib.h 需要包含 AAA.hBBB.h 才能正常工作。

现在,碰巧 BBB.h 也包含了 AAA.h,但这完全取决于实现,MyLib 的一个细节.h 应该不需要关心。

但是,MyLib.h 的编写者错误地忽略了包含 AAA.h 并且从未注意到。据我所知,这通常不会导致错误或警告。后来,有人更改了BBB.h 的实现细节,使得AAA.h 不再需要,因此被删除。现在 MyLib 无法编译,因为 BBB 库的内部结构发生了变化。

在这种情况下有没有办法报错或警告?我怀疑(如果这甚至可能的话)它会在包含的 header 中使用某种注释。

最佳答案

我觉得最好避免依赖公共(public)接口(interface)头文件中的其他头文件,这样就不会出现这个问题。

公共(public)接口(interface) header 不应包含不必要的定义。

有很多技巧可以在没有包含文件的情况下做事。例如,如果您只需要一个指针,您可以手动声明结构标签(只定义 typedef 的库会阻碍这一点)并且您可以使用 _Bool而不是 bool避免 <stdbool.h> .不幸的是,许多重要的类型,例如 size_tuint32_t仅在 header 中定义。

有些包甚至定义了自己的 foo_uint32_t使用配置所以他们不需要包括 <stdint.h>在他们的公共(public)接口(interface)标题中。这非常棘手,因为类型必须完全相同以避免混淆:即使 sizeof(unsigned int) == sizeof(unsigned long) == 4它们是不同的类型。因此,这可能不值得。

关于c - 有没有办法检测文件依赖项何时满足 "accidentally"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722808/

相关文章:

objective-c - 未保留 Objective C 变量值

c - 这个 for() 循环迭代了多少次?

C++ 一头多源

使用 cookie 和 header 的 PHP 重定向

python - 告诉 zlib python 是用什么版本构建的

c - 在进程树中查找子进程的级别

c++ - 处理大型头文件

include - Cmake 附加包含

c++ - #include-ed 的所有 ".h"头文件是否都必须与 .cpp 文件位于同一文件夹中?

c - C 程序中的变量段?