Whitespace
- Indent using two spaces.
- Indent line continuations at least four spaces.
- Don't use tabs.
- Use a space after keywords:
if, while, for, switch.
- Use a space after delimiters: comma, semicolon, colon.
- Don't use spaces around unary operators, including
., ->, [].
- For pointers/references, the
*/& should immediately follow the type.
- Don't use "extra" whitespace after function names, parentheses, brackets.
Formatting
- Limit line lengths to 80 characters.
- Use Bjarne's coding style for braces.
- Don't put braces around single-statement blocks.
- Use parentheses around bit-wise logical operators.
Comments
- Use only significant comments.
- Use doxygen comments for public interfaces.
- Put design comments in a design document.
Functions
- Names should be verbs.
- Pass lightweight parameters by value.
- Use a pointer (instead of a reference) for a parameter that returns a value.
- Avoid returning values in a parameters.
- It's fine to
return early.
Standard C++
- Use modern language features.
- Use
nullptr.
- Use
explicit for single-argument constructors.
- Use
class for template parameters instead of typename.
- Avoid using the C preprocessor.
Standard Library
- Use
std::array instead of C++ arrays.
- Use
std::vector instead of arrays.
- Prefer
std::vector container.
- Use smart-pointers to manage resources.
rci Library
- Use
rci::InternallyLocked instead of std::mutex.
- Use
rci::numeric_cast instead of static_cast.
- Use
rci::pointer_cast instead of static_cast.
Errors
- Handle unexpected errors with exceptions.
- Use
<system_error> or <stdexcept>.
- Use
RCI_ENFORCE(), RCI_ASSERT(), and RCI_VERIFY().
- Throw exceptions for unexpected errors.
- Don't throw exceptions for expected errors.
Names
- Use namespaces.
- Use camelcase.
- Only use all uppercase for preprocessor macros and constants.
- Capitalize names of namespaces, types, globals, and static members.
- Prefix an underscore to private member variables (or
m).
- Postfix an underscore to member function parameters.