我目前正在做一个大项目,并保持所有这些包括警卫让我疯狂! 用手写字是浪费时间。 尽pipe许多编辑可以产生包括守卫,但这并没有多大帮助: 编辑器根据文件名生成警卫符号。 当您在不同的目录中具有相同的文件名标题时,会出现问题。 他们两人将得到相同的包括后卫。 将目录结构包含在警卫符号中需要编辑器的一些奇特的方法,因为macros中的斜杠和反斜杠不是最好的。 当我不得不重新命名一个文件时,我应该重命名所有的包括守卫(在ifndef中,定义和理想的endif的评论)。 烦人。 预处理器充斥着大量的符号,而不知道它们的意思。 尽pipe如此,定义只包含一次,编译器每次遇到头文件时仍然会打开头文件。 包括守卫不适合命名空间或模板。 事实上,他们正在颠覆命名空间! 你有一个机会,你的警卫符号将不是唯一的。 在单个目录中的程序包含less于1000个标题的时候,它们可能是可以接受的解决scheme。 但是现在呢? 这是古老的,与现代编码习惯无关。 最让我困扰的是这个问题几乎可以通过#pragma一次指令来解决。 为什么它不是一个标准?