我目前正在开展一个大型项目并且维护所有这些包括警卫让我疯狂!手工编写是令人沮丧的浪费时间.虽然许多编辑可以生成包含警卫,但这并没有多大帮助:
编辑器根据文件名生成保护符号.如果在不同目录中具有相同文件名的标头,则会出现此问题.他们两个都会得到相同的包括后卫.将目录结构包含在保护符号中需要编辑器的一些奇特的方法,因为宏中的斜杠和反斜杠不是最好的.
当我必须重命名文件时,我应该重命名所有包含警戒(在ifndef中,定义和理想的endif的注释).烦人.
预处理器充斥着大量的符号,而不知道它们的含义.
然而,定义包含一次,编译器每次遇到标题包含时仍会打开标题.
包含防护不适合命名空间或模板.实际上他们正在颠覆命名空间!
你的守卫符号有可能不是唯一的.
当程序在单个目录中包含少于1000个标头时,它们可能是可接受的解决方案.但是现在呢?它很古老,与现代编码习惯无关.令我困扰的是,这个问题几乎可以通过#pragma once指令完全解决.为什么不是标准?
在使用.hpp/.cpp模板创建新类时,是否有可能(以及如何)在Eclipse CDT中自动生成的包含保护的名称中添加命名空间?
对我来说,Eclipse很好地生成了一个带有命名空间的新类,但是包含保护不包含命名空间,因此如果相同的头文件在两个不同的目录中存在两次,则只能包含一个.
在我的例子中,命名空间的名称,Eclipse项目名称和源目录的名称都是相同的,因此这些可以作为include guard的前缀.
我希望通过使用Eclipse/CDT创建一个新的C++类来自动生成include-guard,但是我找不到任何改变${include_guard_symbol}属性的方法.
我的愿望是带有名称空间前缀的include-guard,如下所示:
#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP
Run Code Online (Sandbox Code Playgroud)
但如果我使用#ifndef ${namespace_name}_${include_guard_symbol}它,它将产生:
namepace1::namespace2::_HEADER_HPP
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我需要为一个项目编写的代码来匹配一些样式指南.但是,CDT附带的标准模板与此样式不匹配.特别是头部防护装置的布局不是应该的方式.我查看了模板,对于我的Eclipse,它看起来像这样:
${filecomment}
#ifndef ${include_guard_symbol}
#define ${include_guard_symbol}
${typecomment}
${declarations}
#endif /* ${include_guard_symbol} */
Run Code Online (Sandbox Code Playgroud)
所以我猜这个变量${include_guard_symbol}是在CDT的某个地方设置的,但是有可能在不需要修改CDT本身的情况下改变这个设置吗?
稍微不同但相关的说明:是否可以添加自己的模板,因此您可以使用项目的常规新对话框添加其他类型的新文件(测试用例,专用类等)?