C++ Style Guide
Naming
Directory Names
In snake case, e.g. my_directory
File Names
In pascal case, e.g. MyFile.cpp
. For single-class files, the filename should be consistent with the class name.
Type Names
In pascal case, e.g. MyClass
. Names of all types including classes, structs, type aliases, enums and type template parameters should follow this rule.
Variable Names
Common Variable Names
In camel case, e.g. myVariable
.
Class and Struct Data Members
For non-public ones, in Hungarian, e.g. mMyMember
.
For public ones, in camelCase, e.g. myMember
.
Constant Names
In Pascal case, e.g. MyConst
.
Function Names
In camel case, e.g. myFunction
.
Namespace Names
In lower case, e.g. my_namespace
.
Enumerator Names
In pascal case, e.g. MyEnumerator
.
Macro Names
In upper snake case, e.g. MY_MACRO
.
Comments
Comment Style
Use // ...
for end-of-line comments. Use /* ... */
for mid-line comments. Use /// ...
for Doxygen comments.
File Comments
Start each file with license boilerplate.
If a source file (such as a .h file) declares multiple user-facing abstractions (common functions, related classes, etc.), include a comment describing the collection of those abstractions.
Struct and Class Comments
Every non-obvious class or struct declaration should have an accompanying comment that describes what it is for and how it should be used, including at least a brief introduction and public attribute description.
For separated classes, e.g. .h
and .cpp
, comments should go with header files.
Function Comments
Including at least a brief introduction, parameter and return value description, and exception description.
Variable Comments
Class Data Members
All public members should have a comment.
Global Variables
All global variables should have a comment describing what they are, what they are used for, and (if unclear) why they need to be global.
Implementation Comments
In third-person tense.
Function Argument Comments
If function arguments are not clear, comments should be added, e.g. /*count=*/
.
TODO Comments
TODOs should include the string TODO in all caps, followed by the issue ID and the description referenced by the TODO, e.g. // TODO(#1234): Update this list after the Foo service is turned down.
.