我们都知道何时使用包含警卫,但何时不在我们的项目中使用它?
最近,我看到了一个混合编译项目(CUDA + GCC),一个头文件(CUDA文件)是故意留下而没有包含后卫。我只是好奇。
答案 0 :(得分:13)
我头脑中有两种情况:
assert.h
的工作方式)答案 1 :(得分:2)
当您确实希望使用不同参数多次包含同一文件时的一种情况。在这种情况下,包含文件将充当一种模板。一个例子是Dosbox上的scalers。
答案 2 :(得分:2)
在我们的项目中,我们从不使用包含警卫。我们正在使用include antiguard:
#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif
因为如果你重新包含相同的标题 - 你编写错误的代码或使用错误的架构。
答案 3 :(得分:0)
使用包含保护,以便可以在单个编译单元中多次包含包含文件,而不会导致重复声明。
当文件应在单个编译单元中多次包含时,不要使用包含保护,这不会导致重复的声明。