什么时候不使用头文件中的include保护
When not to use include guard in header file?
我们都知道什么时候应该使用include保护,但是什么时候不应该在我们的项目中使用它呢?
最近,我看到一个混合编译(CUDA + GCC)的项目,一个头文件(CUDA文件)故意没有包含保护。我只是好奇。
我想到了两种情况:
- 当你想打开/关闭调试功能(如
assert.h
的工作方式) - 用于'x-macro'类型的功能,其中包含文件执行问题的两个部分,例如定义一个枚举,然后定义一个与枚举对应的字符串化名称数组
在我们的项目中,我们从不使用include保护。我们正在使用include antiguard:
#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif
因为如果你重新包含相同的头-你写了错误的代码或使用错误的架构。
当您想要使用不同的参数多次包含相同的文件时的一个例子。在这种情况下,包含文件将充当一种模板。一个例子是Dosbox上的标量
使用Include保护,使包含文件可以在单个编译单元中被包含多次,而不会导致重复声明。
当文件应该在一个编译单元中包含多次时,不要使用include保护符,这样不会导致重复的声明。
相关文章:
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么在保护模式下继承升级不起作用
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- 访问被拒绝后,c++中的故障保护代码
- C++:无法访问声明的受保护成员
- 为什么您需要C++头文件的包含保护
- lock_guard是否保护返回值
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- C++包含来自 #include "DevEngine/Core.h" 的错误
- 继承和友元函数,从基类访问受保护的成员
- <filesystem> 在 clang 6 和 10 上 #include 错误
- 在 void 函数中使用 #include 变量C++
- 如果目标文件已经具有标头保护,我们是否应该用 #ifndef 来保护 #include
- #在include保护结束之前将.cpp包含在.h文件中
- 在include保护的#define开头使用下划线
- 什么时候不使用头文件中的include保护
- 为什么't my include保护防止递归包含和多个符号定义