假设有三个 header AAA.h
、BBB.h
和 MyLib.h
。 MyLib.h
需要包含 AAA.h
和 BBB.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_t
和 uint32_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/