====== Coding Style Guide ====== EEROS is written primarily in C++, and its developers follow the [[https://google.github.io/styleguide/cppguide.html|Google C++ Style Guide]] with some modifications: === #define Guards === We use define guards with a naming similar to Java package names. For example, lets look at the class ''Block'' using the following source files: * include/control/Block.hpp * src/control/Block.cpp In Java the class ''Block'' would be located in the package ''org.eeros.control''. Considering this our define guard in the header file looks like this: #ifndef ORG_EEROS_CONTROL_BLOCK_HPP_ #define ORG_EEROS_CONTROL_BLOCK_HPP_ ... #endif // ORG_EEROS_CONTROL_BLOCK_HPP_ === File Names and Extensions === * File names * File names should be the same as the class name. For example, for the class ExampleClass the header file is ExampleClass.hpp and the source file ExampleClass.cpp * If there is more then one class defined in a single file, we use the module name for the file name. A module name always starts with a small letter (e.g. exampleModule.cpp) * File extensions * C++ Source Code: use .cpp * C++ Headerfiles: use .hpp === Variable Names === General guidelines for variable names are as follows: * Always start with lower case * No underscores between words in a variable name * No underscores at the beginning or end of member variables * No m_ prefix for member variables * No p_ prefix for private variables * Constants begin with a lowercase k (e.g. kGain) * Pointers start with a lowercase p (e.g. pLength) except when: * It is an Array * It is a c - String Examples: tableName -> OK tablename -> OK, but tableName is better table_name -> Wrong _tableName -> Wrong m_tableName -> Wrong tableName_ -> Wrong ==== Code Documentation ==== * The documentation of the code is done with Doxygen. * The code is documented in the declaration, never in the definition. * Whenever possible the definition should be separated from the declaration. * Templates have to be defined directly in the hpp-file. In that case, the documentation will be added there.