是否可以在 C/C++ 中永远不使用 header 守卫?如果是这样,这种方法有什么优势吗?

Is it possible to never use header guards in C/C++? If so, does this approach have any advantage?

我最近参与了一个项目,该项目禁止使用 header 守卫,因为它是“糟糕的设计”。自定义类型是前向声明的,headers 仅包含在 cpp 文件中。

这是我看到的第一个这样做的项目,我发现使用起来很不舒服,如果由我来决定,我会介绍守卫。

使用它们对我来说一直是既定的,所以我什至不知道如何反对不使用它们,除了强调它不舒服的事实。该项目清楚地编译,所以在这种情况下它是可行的,但我有几个问题:

头部护板不是“糟糕的设计”。参考Bjarne Stroustrup and Herb Sutter:

SF.8: Use #include guards for all .h files

我很乐意看到你的新项目背后的人与 Stroustrup 和 Sutter 争论什么是 C++ 中的“糟糕设计”。

前向声明是一个很好的工具,是的。但肯定不是所有情况的答案。那将如何工作?您只有 class 成员的指针?您一丝不苟地确保头文件中没有定义任何内容?

我想不在其他 header 中包含 header 会导致在每个翻译单元(.cpp 文件)中维护 header 列表。

如果在一个 class 中引入了对另一个的依赖,则每个 header 列表都将被更新。同样,要利用破坏的依赖性,每个列表也必须更新。

这看起来不像是一个“好的设计”。