C++,如果我需要它,我是否应该#include *和*它包含的其他东西?
C++, Should I #include something if I need it *and* something else it includes?
假设我有一个名为 foo.h
的头文件,它包含另一个头文件 bar.h
。
我还有一个名为 xyz.h
的头文件。需要foo.h
和bar.h
,虽然foo.h
和bar.h
没有任何关系,所以我觉得只是 包括 foo.h
(仍然编译,因为它包括 bar.h
...
因此,foo.h
包括 bar.h
,bar.h
不 包括 foo.h
,但 xyz.h
是否包括 foo.h
和 bar.h
。这是不好的做法吗?我有什么理由不应该这样做吗?为什么我能做到这一点?
每个 header 应该是 self-contained。它应该包括它需要的所有其他 header,并且有 include guards。
假设 header 不是独立的。然后,如果你想在不同的客户端中使用那个 header,那么新客户端甚至不会编译,除非你找到并拉动其他 headers 的需要。
在极少数情况下 header 文件可能不是 self-contained,例如查看 Google's code style 了解详细信息。
大多数编译器都支持包含依赖项调查的选项。 question.
中讨论了这些选项和其他工具
假设我有一个名为 foo.h
的头文件,它包含另一个头文件 bar.h
。
我还有一个名为 xyz.h
的头文件。需要foo.h
和bar.h
,虽然foo.h
和bar.h
没有任何关系,所以我觉得只是 包括 foo.h
(仍然编译,因为它包括 bar.h
...
因此,foo.h
包括 bar.h
,bar.h
不 包括 foo.h
,但 xyz.h
是否包括 foo.h
和 bar.h
。这是不好的做法吗?我有什么理由不应该这样做吗?为什么我能做到这一点?
每个 header 应该是 self-contained。它应该包括它需要的所有其他 header,并且有 include guards。
假设 header 不是独立的。然后,如果你想在不同的客户端中使用那个 header,那么新客户端甚至不会编译,除非你找到并拉动其他 headers 的需要。
在极少数情况下 header 文件可能不是 self-contained,例如查看 Google's code style 了解详细信息。
大多数编译器都支持包含依赖项调查的选项。 question.
中讨论了这些选项和其他工具