我目前正在做一个大项目,维护所有这些包括警卫让我抓狂!手写是令人沮丧的浪费时间。尽管许多编辑器可以生成包含守卫,但这并没有多大帮助:
编辑器根据文件名生成保护符号。当您在不同目录中具有相同文件名的标头时,会出现此问题。他们都将获得相同的包括后卫。将目录结构包含在保护符号中需要编辑器采取一些奇特的方法,因为宏中的斜杠和反斜杠并不是最好的选择。
当我必须重命名一个文件时,我也应该重命名所有包含保护(在 ifndef 中,定义最好是 endif 的注释)。恼人的。
预处理器充斥着大量符号,却不知道它们的含义。
然而定义被包含一次,编译器仍然在每次遇到头包含时打开头。
包含守卫不适合命名空间或模板。事实上,他们正在颠覆命名空间!
你有可能你的守卫符号不会是唯一的。
当程序在单个目录中包含少于 1000 个标头时,它们可能是可接受的解决方案。但如今呢?它很古老,与现代编码习惯无关。最困扰我的是,这个问题几乎可以通过#pragma once 指令完全解决。为什么不是标准?