何时不在头文件中使用include guard?

我们都知道何时使用包括警卫,但何时不在我们的项目中使用它?

最近,我看到了一个混合编译项目(CUDA + GCC),一个头文件(CUDA文件)被故意留下而没有包括后卫。 我只是好奇。

我头脑中有两种情况:

  1. 当你想打开/关闭调试function时(如assert.h如何工作)
  2. 对于’x-macro’类型的function,你有include文件执行2部分问题,例如定义枚举然后定义对应于枚举的字符串化名称数组

有一种情况,您希望使用不同的参数多次包含同一文件。 在这种情况下,包含文件将充当一种模板。 一个例子是Dosbox上的缩放器 。

在我们的项目中,我们从不使用包括警卫 我们正在使用include antiguard:

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

因为如果你重新包含相同的标题 – 你编写错误的代码或使用错误的架构。

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

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