6

I need the code I am writing for a project to match some style guidelines. However the standard templates included with CDT don't match this style. Especially the layout of the header guards is not the way it should be. I had a look at the template and for my Eclipse it looks like this:

${filecomment}

#ifndef ${include_guard_symbol}
#define ${include_guard_symbol}

${typecomment}
${declarations}

#endif /* ${include_guard_symbol} */

So I am guessing the variable ${include_guard_symbol} is set somewhere in the CDT, but is it possible to change this setting without needing to modify the CDT itself?

On a slightly different, but related note: Is it possible to add your own templates, so you just could add new files of other types (test-cases, specialized classes etc) using the normal new dialog for the project?

LiKao
  • 10,408
  • 6
  • 53
  • 91
  • possible duplicate of [Eclipse-CDT: Use Namespace in automatic generated include-guards](http://stackoverflow.com/questions/3520943/eclipse-cdt-use-namespace-in-automatic-generated-include-guards) – mmmmmm Aug 13 '12 at 21:18

2 Answers2

6

We've had a similar struggle on our project. One solution is to throw out ${include_guard_symbol} in the template all together, and define it yourself, possibly using some of the other predefined variables. Something like this:

${filecomment}

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

${typecomment}
${declarations}

#endif /* MyProject_${file_base}_h */

So for a header file named inc/Foo.h, the include guard would be inserted like this:

#ifndef MyProject_Foo_h
#define MyProject_Foo_h

Unfortunately, there doesn't seem to be a way to customize much beyond that. For example, if I defined a class nested in a namespace, I might want to put the namespace as part of the include guard. I can't find a way to do that in eclipse, currently.

Ogre Psalm33
  • 21,366
  • 16
  • 74
  • 92
  • This was similar to the idea I had to. I think I'll just have a look if there is a feature request for CDT already or open one if there isn't. – LiKao Apr 14 '11 at 15:47
  • 1
    Also project_name variable can be used. (if it has no spaces) #ifndef COMPANY_${project_name}_${type_name}_H_ – Konrad Nowicki Nov 22 '11 at 10:27
6

So in the Preferences dialog under C/C++ -> Code Style -> Code Templates you can modify the template to be closer to what you need, for example if you need the namespace in the guard, you can do something like.

${filecomment}

#ifndef ${namespace_name}_${include_guard_symbol}
#define ${namespace_name}_${include_guard_symbol}

${includes}

${namespace_begin}

${declarations}

${namespace_end}

#endif /* ${namespace_name}_${include_guard_symbol} */
Stuart
  • 330
  • 4
  • 10