Skip to content
Axel Huebl edited this page Jan 22, 2014 · 12 revisions

You are here: Developer Documentation > Coding Guide Lines

Help improving these guide lines!

  • Copyright notice:
    • must contain the current year (if changed - and a commit of a file means a change)
    • should be checked on a per-directory rule set for the right license
  • References and Pointers are part of the Type (no space), e.g. foo( int* i, float& b )
  • Add something template meta programming specifig: public typedefs like ValueType and type (boost resultOf)
  • functions and members like this? (@psychocoderHPC is for opt-in splitting type and compiler hints on separate lines if necessary)
template<class T_A>  /* templates */
HDINLINE void        /* compiler hints [optional newline] return type */
functionName( ... )  /* name params */
{
  /* ... */
}

General C++ Style Guide

  • Indentation: no TABS, use 2 spaces per level
    • a new namespace does not get spaces in front since we sometimes nest them 4 to 5 times:
namespace Clair
{
namespace Bob   /* no spaces */
{
namespace Alice /* no spaces */
{
  /* this guy gets intended */
  Struct FooMe;

} // namespace Alice
} // namespace Bob
} // namespace Clair
  • align pre-compiler commands in the same way
#if(VARIABLE_BOB==1)
#  if(VARIABLE_ALICE==1)
#    define HPC +1
#  endif
#endif
  • TypeNames and objectInstances, e.g. definition of EventTask myEventObject;
  • use CamelCaseNames instead of in-name _ if not explicitly stated otherwise (e.g. fixed pre-/suffixes)
  • comments
    • prefer explicit /* ... */ style
    • use Doxygen syntax for function/class description, choose the style /** \doxygenVariable ... */
    • you should avoid inline comments at all but you must not use ...; // comment as an inline comment
  • braces on new lines (Yeah, East Coast Style!)
if( a == b )
{
   /* do something */
}
  • ( ... ) are part of the caller (see above), no space to that caller but spaces to arguments inside
  • same for template arguments: template< ... >
  • close namespaces with a comment: } // namespace itsName
  • Makros with newlines: align \ symbol to column 80
  • Template Arguments shall be prefixed with T_:
template<typename T_ValueType, class T_SomeOption>
class XYZ;
/*      < typename T0, ... , typename TN    > */
template<BOOST_PP_ENUM_PARAMS(N, typename T)>
/*                      ( const T0, ... , const TN        ) */
HDINLINE void operator()( BOOST_PP_ENUM_PARAMS(N, const T)) const

Git: Naming Conventions for Branches

this section will be moved somewhere else!

  • master -> tags: alpha, beta, 1.0
  • dev -> release-... -> master (tagged commit)
  • topic-myNewFeature or feature-myNewFeature ?
  • fix-aHotfixName

Auto-Testing via ?

  • vera++ (supports transformations -> auto-create pull request to pull request branch with proposed changes?)
  • uncrustify
  • cppcheck