C++ 如何在Eclipse中使用大写文件路径创建${include\u guard\u symbol}?

C++ 如何在Eclipse中使用大写文件路径创建${include\u guard\u symbol}?,c++,eclipse,eclipse-cdt,C++,Eclipse,Eclipse Cdt,在中定义代码模板时,我们可以使用名为${include\u guard\u symbol}的变量,该变量转换为MYFILE\u H 我想要更明确的东西:SRC\u MYFOLDER\u MYFILE\u H 我按照中给出的步骤操作,但我得到的结果是${include\u guard\u symbol}返回一个空字符串!我还看到了StackOverflow上的其他相关问题,但这不是我想要的 我正在使用Eclipse版本3.5.2和CDT版本6.0.2 有没有其他方法可以达到预期的效果?主要观点如下

在中定义代码模板时,我们可以使用名为
${include\u guard\u symbol}
的变量,该变量转换为
MYFILE\u H

我想要更明确的东西:
SRC\u MYFOLDER\u MYFILE\u H

我按照中给出的步骤操作,但我得到的结果是
${include\u guard\u symbol}
返回一个空字符串!我还看到了StackOverflow上的其他相关问题,但这不是我想要的

我正在使用Eclipse版本3.5.2和CDT版本6.0.2

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

主要观点如下:

一种解决方案是将
${include_guard_symbol}
一起扔掉在模板中,然后自己定义它,可能使用一些其他预定义变量。大概是这样的:

${filecomment}

#ifndef MyProject_${file_base}_h
#define MyProject_${file_base}_h

${typecomment}
${declarations}

#endif /* MyProject_${file_base}_h */
#ifndef MyProject_Foo_h
#define MyProject_Foo_h
因此,对于名为inc/Foo.h的头文件,include-guard的插入方式如下:

${filecomment}

#ifndef MyProject_${file_base}_h
#define MyProject_${file_base}_h

${typecomment}
${declarations}

#endif /* MyProject_${file_base}_h */
#ifndef MyProject_Foo_h
#define MyProject_Foo_h

不幸的是,除此之外,似乎没有其他定制方法。例如,如果我定义了一个嵌套在名称空间中的类,我可能希望将名称空间作为include保护的一部分。目前,我无法在eclipse中找到这样做的方法。

这并不是对您问题的真正回答,但我想建议一种替代方法。Include guards提供了一种工作方式,尽管很粗糙,但它禁止头文件中的代码在每个编译单元中包含多次。或者,您可以使用

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


您还可以查看以进行更深入的讨论。

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

  • 退出日食
  • 导航到您的工作区文件夹,然后继续导航到
    \.metadata\.plugins\org.eclipse.core.runtime\settings
  • 我总是喜欢在制作mods之前备份设置文件夹
  • 将名为
    org.eclipse.cdt.ui.prefs的文件加载到文本编辑器中
  • 添加这一行(我把我的放在第3行)
    codemplates.includeGuardGenerationScheme=2
  • 保存文件
  • 重新启动eclipse
  • 我在src文件夹下创建了一个名为MyFolder的文件夹。然后我右键单击并添加了一个新的头文件,结果是:

    #ifndef SRC_MYFOLDER_TEST_H_
    #define SRC_MYFOLDER_TEST_H_
    
    #endif /* SRC_MYFOLDER_TEST_H_ */
    

    谢谢你的回答。我已经看到了你链接的答案,但正如我在问题中所说的,这不是我想要的。我希望将文件夹放在include guard中,而不仅仅是项目名称。谢谢,但这不是一个选项,我从事多平台/编译器项目,不想这样做。你说得对,答案是在我发布问题后编辑的。我不再使用Eclipse了,但我相信这将有助于未来的访问者。谢谢谢谢这对我帮助很大!