如何在 Eclipse 中使用大写文件路径的 ${include_guard_symbol}?
How to have an ${include_guard_symbol} in Eclipse with an uppercase file path?
在Eclipse CDT中定义代码模板时,我们可以使用一个名为${include_guard_symbol}
的变量,该变量转换为MYFILE_H
。
我想有更明确的东西:SRC_MYFOLDER_MYFILE_H
.
我按照回答堆栈 溢出问题自定义Eclipse CDT 的包含保护中给出的步骤进行操作,但我得到的只是让${include_guard_symbol}
返回一个空字符串!我还在 Stack Overflow 上看到了有关将命名空间添加到包含保护的其他相关问题,但这不是我要找的。
我正在使用 Eclipse 版本 3.5.2 和 CDT 版本 6.0.2。
有没有另一种方法可以达到预期的结果?
我安装的最古老的版本是 3.7,我在那里和 4.2 上进行了测试,引用的链接完全符合 OP 的要求。(OP 使用的是 3.5.2)。对于将来来到这里的任何人,这里是步骤
- 退出日食
- 导航到工作区文件夹,然后继续导航到
.metadata.pluginsorg.eclipse.core.runtimesettings
- 我总是喜欢在制作模组之前备份设置文件夹
- 将名为
org.eclipse.cdt.ui.prefs
的文件加载到文本编辑器中 - 添加这一行(我把我的放在第 3 行)
codetemplates.includeGuardGenerationScheme=2
- 保存文件。
- 重新启动日食
我在 src 文件夹下创建了一个名为 MyFolder 的文件夹。然后我右键单击并添加了一个新的头文件,结果是:
#ifndef SRC_MYFOLDER_TEST_H_
#define SRC_MYFOLDER_TEST_H_
#endif /* SRC_MYFOLDER_TEST_H_ */
要点:如何自定义 eclipse CDT 代码模板
一种解决方案是一起丢弃模板中的${include_guard_symbol}
,然后自己定义它,可能使用其他一些预定义变量。像这样:
${filecomment}
#ifndef MyProject_${file_base}_h
#define MyProject_${file_base}_h
${typecomment}
${declarations}
#endif /* MyProject_${file_base}_h */
因此,对于名为 inc/Foo.h 的头文件,包含保护将像这样插入:
#ifndef MyProject_Foo_h
#define MyProject_Foo_h
不幸的是,似乎没有一种方法可以自定义除此之外。例如,如果我定义了一个嵌套在命名空间中的类,我可能希望将该命名空间作为包含保护的一部分。目前,我找不到在日食中做到这一点的方法。
不是你问题的答案,但我想提出一个替代方案。包含保护提供了一种有效但粗糙的方法,禁止头文件中的代码在每个编译单元中多次包含。作为替代方法,您可以使用
#pragma once
编译器指令。我意识到它没有在标准中定义,但它得到了许多编译器的支持,包括GNU,Clang,MSVC和Intel。如果你使用#pragma once
,你失去了很少的可移植性,你避免了名称冲突,我认为这是你首先要更改${include_guard_symbol}
的原因。
您也可以查看 http://en.wikipedia.org/wiki/Pragma_once 以获得更彻底的讨论。
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- C++包含来自 #include "DevEngine/Core.h" 的错误
- <filesystem> 在 clang 6 和 10 上 #include 错误
- 在 void 函数中使用 #include 变量C++
- N-API include an .so or dll
- 允许哪些令牌作为 #include 的参数?
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- WebAssembly include OpenCV
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 修改生成文件以简化框架 #include 路径
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 如何在main.cpp中使用多个头文件时使用Include-guard
- 使用gnu coreutils在C++中查找include-guard类型错误
- 在.cpp(不是.h)中include guard的功能是什么?