相关疑难解决方法(0)

为什么C/C++的"#pragma once"不是ISO标准?

我目前正在开展一个大型项目并且维护所有这些包括警卫让我疯狂!手工编写是令人沮丧的浪费时间.虽然许多编辑可以生成包含警卫,但这并没有多大帮助:

  1. 编辑器根据文件名生成保护符号.如果在不同目录中具有相同文件名的标头,则会出现此问题.他们两个都会得到相同的包括后卫.将目录结构包含在保护符号中需要编辑器的一些奇特的方法,因为宏中的斜杠和反斜杠不是最好的.

  2. 当我必须重命名文件时,我应该重命名所有包含警戒(在ifndef中,定义和理想的endif的注释).烦人.

  3. 预处理器充斥着大量的符号,而不知道它们的含义.

  4. 然而,定义包含一次,编译器每次遇到标题包含时仍会打开标题.

  5. 包含防护不适合命名空间或模板.实际上他们正在颠覆命名空间!

  6. 你的守卫符号有可能不是唯一的.

当程序在单个目录中包含少于1000个标头时,它们可能是可接受的解决方案.但是现在呢?它很古老,与现代编码习惯无关.令我困扰的是,这个问题几乎可以通过#pragma once指令完全解决.为什么不是标准?

c c++ pragma include-guards

50
推荐指数
4
解决办法
7900
查看次数

Eclipse-CDT:在自动生成的包含保护中使用命名空间

在使用.hpp/.cpp模板创建新类时,是否有可能(以及如何)在Eclipse CDT中自动生成的包含保护的名称中添加命名空间?

对我来说,Eclipse很好地生成了一个带有命名空间的新类,但是包含保护不包含命名空间,因此如果相同的头文件在两个不同的目录中存在两次,则只能包含一个.

在我的例子中,命名空间的名称,Eclipse项目名称和源目录的名称都是相同的,因此这些可以作为include guard的前缀.

eclipse namespaces eclipse-cdt include-guards

15
推荐指数
1
解决办法
3429
查看次数

为Eclipse CDT定制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)

我怎样才能做到这一点?

customization eclipse-cdt include-guards

15
推荐指数
1
解决办法
4212
查看次数

如何自定义eclipse CDT代码模板

我需要为一个项目编写的代码来匹配一些样式指南.但是,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本身的情况下改变这个设置吗?

稍微不同但相关的说明:是否可以添加自己的模板,因此您可以使用项目的常规新对话框添加其他类型的新文件(测试用例,专用类等)?

eclipse eclipse-cdt

6
推荐指数
2
解决办法
6582
查看次数