Skip to content

nluka/cpp-style-guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

cpp-style-guide

Naming

  • 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;

Classes

PascalCase

class CliOption {};

// `Numeric` and `Bool` are adding specificity to `CliOption`
class CliOptionNumeric  : public CliOption {};
class CliOptionBool     : public CliOption {};

Enum Members

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;

Functions

lower_snake_case

void ant_init();
void ant_move();

// also applies to member functions
class C {
  void do_thing();
};

Global Variables

g_camelCase

int g_count;
std::string g_str;

Local Variables

camelCase

void func() {
  int custAge;
  std::string custNameFirst;
}

Macros

SCREAMING_SNAKE_CASE

#define MACRO 1
#define FUNCTION_LIKE_MACRO(x) (x + 1)

Member Variables

m_camelCase

class Customer {
  int m_age;
  std::string m_firstName;
};

Namespaces

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`

Static Variables

s_camelCase

class C {
  static int s_count;
};

void func() {
  static std::string s_str;
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published