- When possible, identifiers should get more specific as they go from left to right
// WRONG:
int ageOfCust;
std::string firstNameOfCust;
// RIGHT: less specific -> more specific
int custAge; // cust -> age
std::string custNameFirst; // cust -> name -> first|last
// rule doesn't always make sense to follow:
bool isFirstNameLong, isOptionValueMissing;
PascalCase
class CliOption {};
// `Numeric` and `Bool` are adding specificity to `CliOption`
class CliOptionNumeric : public CliOption {};
class CliOptionBool : public CliOption {};
SCREAMING_SNAKE_CASE
- First member should be explicitly assigned value for clarity
enum class Direction {
NORTH = 0, // assigned explicitly
EAST,
SOUTH,
WEST
};
// also applies to C-style enums (but always prefer enum classes):
typedef enum Dir {
D_NORTH = 0, // assigned explicitly
D_EAST,
D_SOUTH,
D_WEST
} Dir_t;
lower_snake_case
void ant_init();
void ant_move();
// also applies to member functions
class C {
void do_thing();
};
g_camelCase
int g_count;
std::string g_str;
camelCase
void func() {
int custAge;
std::string custNameFirst;
}
SCREAMING_SNAKE_CASE
#define MACRO 1
#define FUNCTION_LIKE_MACRO(x) (x + 1)
m_camelCase
class Customer {
int m_age;
std::string m_firstName;
};
flatcase
- Pick short names (<= 4 chars when possible), abbreviations are ideal
namespace lsl {} // stands for `lslargest`
namespace asc {} // stands for `ant simulator core`
namespace asl {} // stands for `ant simulator lite`
namespace cstr {} // stands for `C string`
s_camelCase
class C {
static int s_count;
};
void func() {
static std::string s_str;
}