9

Eclipse CDT中定义代码模板时,我们可以使用一个名为的变量${include_guard_symbol}来转换为MYFILE_H.

我想要更明确的东西:SRC_MYFOLDER_MYFILE_H.

我按照Stack Overflow 问题Customizing include-guard for Eclipse CDT的回答中给出的步骤操作,但我得到的只是${include_guard_symbol}返回一个空字符串!我还在 Stack Overflow 上看到了有关将命名空间添加到 include guard 的其他相关问题,但这不是我想要的。

我正在使用带有 CDT 版本 6.0.2 的 Eclipse 版本 3.5.2。

有没有其他方法可以达到预期的结果?

4

3 回答 3

4

我安装的最旧版本是 3.7,我在那里和 4.2 上进行了测试,并且引用的链接完全符合 OP 的要求。(OP 使用的是 3.5.2)。对于将来来这里的任何人,这里是步骤

  1. 退出 Eclipse
  2. 导航到您的工作区文件夹,然后继续导航到\.metadata\.plugins\org.eclipse.core.runtime\settings
  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_ */
于 2013-09-18T00:21:15.210 回答
1

要点由此而来:如何自定义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

不幸的是,似乎没有一种方法可以自定义超出此范围。例如,如果我定义了一个嵌套在命名空间中的类,我可能希望将命名空间作为包含保护的一部分。目前,我找不到在 Eclipse 中执行此操作的方法。

于 2012-11-07T13:16:18.743 回答
0

不是你的问题的真正答案,但我想提出一个替代方案。包含守卫提供了一种可行的,尽管是粗略的方式来禁止头文件中的代码在每个编译单元中包含多次。作为替代方案,您可以使用

#pragma once

编译器指令。我意识到它没有在标准中定义,但许多编译器都支持它,包括 GNU、Clang、MSVC 和 Intel。如果你使用#pragma once,你会失去很少的可移植性,并且可以避免名称冲突,我认为这是你首先要更改的原因${include_guard_symbol}

您还可以查看http://en.wikipedia.org/wiki/Pragma_once进行更深入的讨论。

于 2012-11-14T12:28:45.477 回答