Differences between revisions 12 and 13
Revision 12 as of 2010-10-31 17:11:40
Size: 4321
Editor: MalteHelmert
Revision 13 as of 2010-11-15 18:04:33
Size: 4365
Editor: MalteHelmert
Comment: old name didn't really fit the content any more
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from CodingConventions

Back to the HomePage.

Coding conventions



We follow the task-based workflow explained here. All significant development should be in response to an issue in the tracker, let's say issue1000. Then the usual development process involves two roles, "developer" and "reviewer" (usually Malte), and works as follows:

  1. Developer creates a new branch issue1000 in their own repository, usually branching off the newest revision in default. Note the exact spelling of the branch. Being consistent here allows us to automate some of these steps in the future.

  2. Developer resolves the issue in the branch. (Developer does not close the branch or push the changes to the master repository.)

  3. Developer sets the status of the issue to "reviewing".
  4. Reviewer pulls the issue1000 branch into their own repository.
  5. Reviewer reviews the code. If reviewer is not satisfied, go back to step 2.
  6. Reviewer closes the issue1000 branch.
  7. Reviewer merges the issue1000 branch into the default branch.
  8. Reviewer pushes the issue1000 branch and its merge into the master repository.
  9. Reviewer sets the status of the issue to "resolved".

Commit messages

The first line of the commit message should consist of a self-contained summary and be no longer than 67 characters.

All other lines should be below 80 characters.

Python code

We follow PEP 8.

C++ code

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:

  • /C++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".


  • 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:

   3 // ...
   4 #endif

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

Function signatures

  • Use const methods whenever appropriate.

  • Pass strings by const reference.

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


  • Don't write NULL for null pointers. Write 0. (The latter is slightly preferred in C++, unlike C. C++ 0x will change that, but we're not there yet. In any case, it's not good to mix styles.)

  • Don't write (ptr != 0). Write (ptr).

  • Don't write (ptr == 0). Write (!ptr).

  • Don't write (seq.size() == 0). Write (seq.empty()).

  • Don't write (seq.size() != 0). Write (!seq.empty()).

FastDownward: ForDevelopers (last edited 2021-07-02 15:02:48 by PatrickFerber)