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

时间:2011-07-22 16:35:08

标签: c++ c include-guards

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

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

4 个答案:

答案 0 :(得分:13)

我头脑中有两种情况:

  1. 当您想要打开/关闭调试功能时(如assert.h的工作方式)
  2. 用于'x-macro'类型的功能,其中包含文件执行2部分问题,例如定义枚举,然后定义与枚举对应的字符串化名称数组

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

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