如何在 Eclipse 中使用大写文件路径的 ${include_guard_symbol}?

How to have an ${include_guard_symbol} in Eclipse with an uppercase file path?

本文关键字:include guard symbol 路径 文件 Eclipse      更新时间:2023-10-16

在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)。对于将来来到这里的任何人,这里是步骤

  1. 退出日食
  2. 导航到工作区文件夹,然后继续导航到.metadata.pluginsorg.eclipse.core.runtimesettings
  3. 我总是喜欢在制作模组之前备份设置文件夹
  4. 将名为org.eclipse.cdt.ui.prefs的文件加载到文本编辑器中
  5. 添加这一行(我把我的放在第 3 行)
    codetemplates.includeGuardGenerationScheme=2
  6. 保存文件。
  7. 重新启动日食

我在 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 以获得更彻底的讨论。