Differences between revisions 1 and 5 (spanning 4 versions)
Revision 1 as of 2010-08-01 18:48:34
Size: 132
Editor: MalteHelmert
Comment:
Revision 5 as of 2010-08-03 14:31:24
Size: 2179
Editor: MalteHelmert
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
 * [[./Formatting]]: line length, how to break lines, where to put spaces, etc. This is not meant to be a complete description of our coding conventions.
When in doubt, follow the example of the existing code.

To keep the size of this file reasonable, the following parts have been broken out to subpages:

 * [[/Formatting]]: line length, how to break lines, where to put spaces, etc.

== General recommendations ==

We generally follow the recommendations in the book
[[http://www.gotw.ca/publications/c++cs.htm|C++ Coding Standards: 101 Rules, Guidelines, and Best Practices]]
by Herb Sutter and Andrei Alexandrescu. In the tracker or elsewhere, a mark of the form '''[SA '''''x''''']'''
is a reference to a rule in that book. For example, '''[SA 9]''' refers to Sutter and Alexandrescu's rule 9:
"Don’t pessimize prematurely".

== Namespaces ==

 * Every subdirectory should correspond to a namespace.
 * Avoid nested namespaces or subdirectories of subdirectories.
 * Namespaces follow the same camel-case naming convention as classes, while directory names follow the naming conventions for methods and variables. For example, file {{{my_subdir/my_class.h}}} would be expected to contain a definition of class {{{MySubdir::MyClass}}}.
 * Namespaces should have short, single-word names if possible. (The previous example only uses an underscore in the subdirectory name for sake of illustration.)

== Header file guards ==

Macro names for header file guards follow this algorithm:
 * Take the filename, including subdirectory name if in a subdirectory.
 * Convert to uppercase.
 * Replace all "{{{.}}}" and "{{{/}}}" with "{{{_}}}".

Example: {{{learning/state_space_sample.h}}} becomes {{{LEARNING_STATE_SPACE_SAMPLE_H}}}.


Guard blocks should look like this:
{{{#!cplusplus
#ifndef LEARNING_STATE_SPACE_SAMPLE_H
#define LEARNING_STATE_SPACE_SAMPLE_H
// ...
#endif
}}}

That's all. In particular, don't add comments to the preprocessor directives and don't add further underscores.

== Virtual methods ==

When overriding a virtual method, mention {{{virtual}}} again in the
declaration (i.e., {{{virtual int foo();}}} rather than {{{int foo();}}}).

Back to the HomePage.

Coding conventions

This is not meant to be a complete description of our coding conventions. When in doubt, follow the example of the existing code.

To keep the size of this file reasonable, the following parts have been broken out to subpages:

  • /Formatting: line length, how to break lines, where to put spaces, etc.

General recommendations

We generally follow the recommendations in the book C++ Coding Standards: 101 Rules, Guidelines, and Best Practices by Herb Sutter and Andrei Alexandrescu. In the tracker or elsewhere, a mark of the form [SA x] is a reference to a rule in that book. For example, [SA 9] refers to Sutter and Alexandrescu's rule 9: "Don’t pessimize prematurely".

Namespaces

  • Every subdirectory should correspond to a namespace.
  • Avoid nested namespaces or subdirectories of subdirectories.
  • Namespaces follow the same camel-case naming convention as classes, while directory names follow the naming conventions for methods and variables. For example, file my_subdir/my_class.h would be expected to contain a definition of class MySubdir::MyClass.

  • Namespaces should have short, single-word names if possible. (The previous example only uses an underscore in the subdirectory name for sake of illustration.)

Header file guards

Macro names for header file guards follow this algorithm:

  • Take the filename, including subdirectory name if in a subdirectory.
  • Convert to uppercase.
  • Replace all "." and "/" with "_".

Example: learning/state_space_sample.h becomes LEARNING_STATE_SPACE_SAMPLE_H.

Guard blocks should look like this:

   1 #ifndef LEARNING_STATE_SPACE_SAMPLE_H
   2 #define LEARNING_STATE_SPACE_SAMPLE_H
   3 // ...
   4 #endif
   5 

That's all. In particular, don't add comments to the preprocessor directives and don't add further underscores.

Virtual methods

When overriding a virtual method, mention virtual again in the declaration (i.e., virtual int foo(); rather than int foo();).

FastDownward: ForDevelopers (last edited 2024-03-15 12:14:37 by MalteHelmert)