【发布时间】:2011-10-07 01:25:29
【问题描述】:
假设有三个标头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 的内部结构发生了变化。
在这种情况下,有没有办法发出错误或警告?我怀疑(如果这甚至可能的话)在包含的标题中需要某种注释。
【问题讨论】:
-
你是对的,它需要注释,因为有时标头被记录以包含其他标头,或者标头是通过包含其他文件在内部实现的。您不希望遇到很多误报,因为您的代码依赖于
/compiler/internals/stl_vector_impl.h中定义的内容,而您的应用程序包含的所有内容都是<vector>,或者用户定义的库遵循类似的组织。 -
GCC 有一个选项可以查看哪些标头包含哪些其他标头:stackoverflow.com/questions/5258826/…