什么时候不使用头文件中的include保护

When not to use include guard in header file?

本文关键字:include 保护 文件 什么时候      更新时间:2023-10-16

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

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

我想到了两种情况:

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

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

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

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

当您想要使用不同的参数多次包含相同的文件时的一个例子。在这种情况下,包含文件将充当一种模板。一个例子是Dosbox上的标量

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

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