gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:03:52 26 4
gpt4 key购买 nike

假设有三个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com