为我的h/hpp文件创建标题保护对我来说一直是标准做法,但我想知道,为什么甚至可以两次包含相同的文件?是否存在实际需要不受保护的标头的情况?
"参数化"头文件可用于模拟C中的C++ - ish样式模板.在这种情况下,头文件将取决于许多宏("模板参数").它将根据这些宏的实际"值"生成不同的代码.
因此,这种标题的典型用法看起来是一系列"模板参数"宏定义,后跟#include指令,后跟另一个"模板参数"宏定义序列,后面跟着相同#include,依此类推.
使用此技术时,您将看到没有任何包含保护的头文件或包含仅包含文件一部分的包含保护的头文件.
在C:
#undef NDEBUG
#include <assert.h>
...code using active asserts...
#define NDEBUG
#include <assert.h>
...code using disabled asserts...
Run Code Online (Sandbox Code Playgroud)
冲洗并重复.C++中的模拟使用标题<cassert>代替.
因此,有时候有理由两次包含标题.不经常,但有理由这样做.