C ++,如果我需要它,我应该#include一些东西*和*包含其他东西吗?

时间:2016-08-21 04:08:19

标签: c++ c coding-style

假设我有一个名为TodoItem的头文件,它包含另一个标头foo.h

我还有一个名为bar.h的头文件。它需要xyz.hfoo.h,虽然bar.hfoo.h彼此无关,所以我觉得很奇怪只是 include { {1}}(由于它包含bar.h ...

,因此仍会编译

因此,foo.h包括bar.hfoo.h 包含bar.h,但bar.h 包含< / em>包括foo.hxyz.h。这是不好的做法吗?我有什么理由不这样做吗?为什么我能做到这一点?

1 个答案:

答案 0 :(得分:2)

每个标题都应该是自包含的。它应该包含所需的所有其他标头并具有include guards

假设标题不是自包含的。然后,如果您希望在不同的客户端中使用该标头,那么新客户端甚至不会编译,除非您找到并拉出其他标头。

当头文件不能自包含时,也可能是罕见的情况,例如检查Google's code style了解详情。

大多数编译器都支持包含依赖项调查的选项。这些选项和其他工具在本question中进行了讨论。