是否可以在 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 文件中。
这是我看到的第一个这样做的项目,我发现使用起来很不舒服,如果由我来决定,我会介绍守卫。
使用它们对我来说一直是既定的,所以我什至不知道如何反对不使用它们,除了强调它不舒服的事实。该项目清楚地编译,所以在这种情况下它是可行的,但我有几个问题:
- 还有其他情况会导致无法开发吗?
- 这种风格有well-known好处吗?
- 是否有使用这种方法的已知开源项目?
- 你如何说服项目负责人允许使用守卫?
头部护板不是“糟糕的设计”。参考Bjarne Stroustrup and Herb Sutter:
我很乐意看到你的新项目背后的人与 Stroustrup 和 Sutter 争论什么是 C++ 中的“糟糕设计”。
前向声明是一个很好的工具,是的。但肯定不是所有情况的答案。那将如何工作?您只有 class 成员的指针?您一丝不苟地确保头文件中没有定义任何内容?
我想不在其他 header 中包含 header 会导致在每个翻译单元(.cpp 文件)中维护 header 列表。
如果在一个 class 中引入了对另一个的依赖,则每个 header 列表都将被更新。同样,要利用破坏的依赖性,每个列表也必须更新。
这看起来不像是一个“好的设计”。
我最近参与了一个项目,该项目禁止使用 header 守卫,因为它是“糟糕的设计”。自定义类型是前向声明的,headers 仅包含在 cpp 文件中。
这是我看到的第一个这样做的项目,我发现使用起来很不舒服,如果由我来决定,我会介绍守卫。
使用它们对我来说一直是既定的,所以我什至不知道如何反对不使用它们,除了强调它不舒服的事实。该项目清楚地编译,所以在这种情况下它是可行的,但我有几个问题:
- 还有其他情况会导致无法开发吗?
- 这种风格有well-known好处吗?
- 是否有使用这种方法的已知开源项目?
- 你如何说服项目负责人允许使用守卫?
头部护板不是“糟糕的设计”。参考Bjarne Stroustrup and Herb Sutter:
我很乐意看到你的新项目背后的人与 Stroustrup 和 Sutter 争论什么是 C++ 中的“糟糕设计”。
前向声明是一个很好的工具,是的。但肯定不是所有情况的答案。那将如何工作?您只有 class 成员的指针?您一丝不苟地确保头文件中没有定义任何内容?
我想不在其他 header 中包含 header 会导致在每个翻译单元(.cpp 文件)中维护 header 列表。
如果在一个 class 中引入了对另一个的依赖,则每个 header 列表都将被更新。同样,要利用破坏的依赖性,每个列表也必须更新。
这看起来不像是一个“好的设计”。