C++ Coding Style

This topic contains the SDK C++ formatting and coding guidelines.

These guidelines are not written in stone! Start a discussion if you have suggestions for improvement (the project will consider anything other than "matters of personal taste").

Formatting and White Space

All .cpp and .h files should be formatted according to the astyle settings defined by astylerc.

To automatically fix the formatting, run the command:

make fix_style


  • Line length should be kept below 100 characters.
    • Enables 3-way-merges with 3 columns possible on decent monitors.
    • Discourages too many nested ifs.
    • Large enough o allow for verbose naming and prevent abbreviations.

General Guidelines

The following general guidelines should be used for all code:

  • C++11 is encouraged to allow developers to use C++11 features and the standard library. Examples:

  • using namespace std is discouraged (read why). If needed specific declarations can be used in the source files such as using std::this_thread::sleep_for to reduce verbosity.

  • The usage of namespacing wherever possible is encouraged (e.g. enum class is to be used over enum).
  • Filename extensions should be .h for header files and .cpp for source files (for consistency).
  • Variable and method names should err on the side of verbosity instead of being quick to type and read. Abbreviations are only to be used for small scopes and should not be exposed in public APIs.
  • All variables that have a physical unit should have the unit in the variable name (e.g. _m for meters, _m_s for meters/second).
  • Variable and method names should be snake_case and class/struct/enum names CamelCase. Private variables should start with an underscore, e.g.: _variable_name.
  • Try to exit functions early instead of nesting ifs (read why).
  • We don't use exceptions but use error codes. There are pros and cons for exceptions but given that the public API should be as simple as possible, it makes sense to refrain from exceptions altogether.
© Dronecode 2017. License: CC BY 4.0            Updated: 2018-07-12 03:09:32

results matching ""

    No results matching ""