C++ Coding Conventions

This page introduces the NWX team’s coding conventions for writing C++. All pull requests are expected to adhere to these conventions. When possible clang-format will be used to enforce them; however, it is not possible to automatically enforce all of these conventions. This page is primarily targeted at conventions which you must manually adhere to, while ci/lint/clang-format.in is the linting file used and should be consulted for the conventions which will be automatically enforced.

Capitalization

C++ is a case-sensitive language. For this reason it is extremely useful for all coders on a project to use the same capitalization conventions, doing so avoids needing to remember how a method, file, etc. is capitalized.

Note: When describing capitalization formats the common choices are

  • snake_case : All lowercase, underscores used to separate words
  • (upper) CamelCase : Each word is capitalized, no spaces
  • (lower) camelCase : Upper CamelCase that does not capitalize the first word
  • ALL_CAPS : All letters are capitalized, underscores separate words

The common elements of a C++ code are listed below as well as how they should be capitalized.

Code Element Case
files snake_case
namespaces snake_case
classes CamelCase
functions snake_case
class members snake_case
template parameters CamelCase
typedefs snake_case
macros ALL_CAPS

The rationale behind these conventions is largely to match common C++ practices such as those used by Boost and the STL. The only exception to this statement is the decision to use CamelCase for class names. This decision stems from wanting to distinguish between built-in types/classes from standard libraries and domain specific classes.