假设我有一个名为TodoItem
的头文件,它包含另一个标头foo.h
。
我还有一个名为bar.h
的头文件。它需要xyz.h
和foo.h
,虽然bar.h
和foo.h
彼此无关,所以我觉得很奇怪只是 include { {1}}(由于它包含bar.h
...
因此,foo.h
包括bar.h
,foo.h
不包含bar.h
,但bar.h
包含< / em>包括foo.h
和xyz.h
。这是不好的做法吗?我有什么理由不这样做吗?为什么我能做到这一点?
答案 0 :(得分:2)
每个标题都应该是自包含的。它应该包含所需的所有其他标头并具有include guards。
假设标题不是自包含的。然后,如果您希望在不同的客户端中使用该标头,那么新客户端甚至不会编译,除非您找到并拉出其他标头。
当头文件不能自包含时,也可能是罕见的情况,例如检查Google's code style了解详情。
大多数编译器都支持包含依赖项调查的选项。这些选项和其他工具在本question中进行了讨论。