命名规范总览

类别 命名规则 示例
函数名 小驼峰式 (camelCase) calculateTotal(), getUserName()
变量名 小驼峰式 (camelCase) userCount, totalAmount
参数名 小驼峰式 (camelCase) inputValue, maxSize
成员变量 尾缀下划线或m_前缀 userName_, m_userName
类名 大驼峰式 (PascalCase) UserAccount, DataProcessor
常量 全大写+下划线 MAX_BUFFER_SIZE, PI_VALUE
宏定义 全大写+下划线 DEBUG_MODE, SAFE_DELETE

详细规则及示例

1. 函数名 (小驼峰式)

1
2
3
4
void calculateTotal();
std::string getUserName();
bool isValid(int value);
void setConfiguration(const Config& config);

2. 变量名 (小驼峰式)

1
2
3
4
int userCount = 0;
double totalAmount = 0.0;
std::string fullName;
bool isActive = false;

3. 参数名 (小驼峰式)

1
2
void processData(const std::vector<int>& inputData, int maxItems);
void setUserInfo(const std::string& userName, int userAge, bool isPremium);

4. 成员变量 (尾缀下划线或m_前缀)

两种常见风格,选择一种并保持一致:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 风格1: 尾缀下划线
class User {
private:
std::string name_;
int age_;
bool isActive_;
};

// 风格2: m_前缀
class User {
private:
std::string m_name;
int m_age;
bool m_isActive;
};

5. 类名 (大驼峰式)

1
2
3
4
class UserAccount {};
class DataProcessor {};
class NetworkConnection {};
struct ConfigOptions {};

6. 常量 (全大写+下划线)

1
2
3
const int MAX_USERS = 100;
constexpr double PI_VALUE = 3.14159265359;
const std::string DEFAULT_CONFIG_PATH = "/etc/app/config";

7. 宏定义 (全大写+下划线)

1
2
3
#define DEBUG_MODE
#define SAFE_DELETE(ptr) if(ptr) { delete ptr; ptr = nullptr; }
#define LOG_ERROR(msg) std::cerr << "ERROR: " << msg << std::endl

完整示例

下面是一个结合以上规则的完整示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <string>
#include <vector>

// 常量定义
constexpr int MAX_USERS = 100;
constexpr double TAX_RATE = 0.08;

// 宏定义
#define SAFE_DELETE(ptr) if(ptr) { delete ptr; ptr = nullptr; }
#define LOG_INFO(msg) std::cout << "INFO: " << msg << std::endl

// 类定义
class UserAccount {
public:
// 构造函数
UserAccount(const std::string& userName, int userAge)
: name_(userName), age_(userAge), isActive_(false) {}

// 公共方法
bool activateAccount() {
if (age_ >= MIN_AGE) {
isActive_ = true;
return true;
}
return false;
}

std::string getDisplayName() const {
return name_ + (isActive_ ? " (Active)" : " (Inactive)");
}

void updateLastLoginTime(const std::string& loginTime) {
lastLogin_ = loginTime;
}

private:
// 私有成员变量
std::string name_;
int age_;
bool isActive_;
std::string lastLogin_;

// 私有常量
static constexpr int MIN_AGE = 18;
};

// 全局函数
void processUserData(const std::vector<UserAccount>& userList, bool includeInactive) {
int activeCount = 0;

for (const auto& user : userList) {
if (includeInactive || user.getDisplayName().find("Active") != std::string::npos) {
LOG_INFO(user.getDisplayName());
activeCount++;
}
}

std::cout << "Processed " << activeCount << " users." << std::endl;
}

int main() {
// 变量定义
std::vector<UserAccount> users;
int totalUsers = 0;

// 创建用户
users.push_back(UserAccount("Alice Smith", 30));
users.push_back(UserAccount("Bob Johnson", 17));
users.push_back(UserAccount("Carol Williams", 25));

// 处理用户
for (auto& user : users) {
if (user.activateAccount()) {
totalUsers++;
}
}

// 显示结果
processUserData(users, true);
std::cout << "Total active users: " << totalUsers << std::endl;

return 0;
}

额外建议

  1. 保持一致性:选择一种风格后,在整个项目中保持一致。
  2. 避免使用匈牙利命名法:现代C++不推荐使用类型前缀(如iCountstrName)。
  3. 使用有意义的名称:避免使用单字母变量名(除了临时变量如循环索引)。
  4. 使用现代C++特性:优先使用constexpr而非宏定义常量,使用nullptr而非NULL
  5. 注释规范:为类、函数和复杂逻辑添加适当的注释。