forked from ComputationalRadiationPhysics/picongpu
-
Notifications
You must be signed in to change notification settings - Fork 0
Coding Guide Lines
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
andtype
(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 */
{
/* ... */
}
- 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:
- a new
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
andobjectInstances
, e.g. definition ofEventTask 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
- prefer explicit
- 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;
- Describe how PreProcessor Macros are unrolled (excellent example)
/* < 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
this section will be moved somewhere else!
-
master
->tags
:alpha
,beta
,1.0
-
dev
->release-...
->master
(tagged commit) -
topic-myNewFeature
orfeature-myNewFeature
? fix-aHotfixName
- vera++ (supports transformations -> auto-create pull request to pull request branch with proposed changes?)
- uncrustify
- cppcheck