什么时候不应该在头文件中使用包含保护?

发布于 2024-11-25 10:30:05 字数 119 浏览 2 评论 0原文

我们都知道什么时候使用includeguard,但是什么时候我们的项目中不应该使用它呢?

最近看到一个混合编译的项目(CUDA + GCC),故意留下一个头文件(CUDA文件),没有包含保护。我只是好奇而已。

We all know when to use include guard, but when shall we not use it in our project?

Recently, I saw a project with mix compilation (CUDA + GCC), one header file (CUDA file) is deliberately left without include guard. I am just curious about it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

墨落画卷 2024-12-02 10:30:05

我想到了两种情况:

  1. 当您想要打开/关闭
  2. 'x-macro' 类型的功能,您可以让包含文件执行问题的两部分,例如定义一个枚举,然后定义一个数组对应于的字符串化名称枚举

There are 2 scenarios off the top of my head:

  1. when you want to turn on/off debugging capabilities (as how assert.h works)
  2. for 'x-macro' type of functionality where you have the include file perform 2 parts of problem, such as defining an enum then defining an array of stringified names corresponding to the enums
违心° 2024-12-02 10:30:05

在我们的项目中,我们从不使用包含防护。我们正在使用 include antiguard:

#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif

因为如果您重新包含相同的标头 - 您编写了错误的代码或使用了错误的架构。

In our projects we never use include guard. We are using include antiguard:

#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif

Because if you reincluded same header - you written wrong code or worked with wrong architecture.

空城缀染半城烟沙 2024-12-02 10:30:05

一种情况是您确实想使用不同的参数多次包含同一文件。在这种情况下,包含文件将充当一种模板。例如 缩放器

One case in when you do want to include the same file several times with different parameters. In this case the include file would act as a sort of template. An example are the scalers on Dosbox.

丢了幸福的猪 2024-12-02 10:30:05

使用包含防护,以便可以在单个编译单元中多次包含包含文件,而不会导致重复声明。

当文件应多次包含在单个编译单元中并且这不会导致重复声明时,请勿使用包含保护。

Include guards are used so that the include file can be included multiple times in a single compilation unit without resulting in duplicate declarations.

Do not use include guards when the file should be included multiple times in a single compilation unit and this does not result in duplicate declarations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文