我的C++编码规范
我对编码规范的理解
在我看来,编码规范不是死板的条条框框。写代码不只是让程序跑起来,更要保证代码可读、方便后续修改和团队协作。如果代码格式混乱、命名随意,不仅别人看不懂,一段时间后我自己再回看也很难快速理解逻辑。一套统一的编码规范,可以减少低级 bug,让代码整洁清晰。下面是我整理的 C++ 编码规范。
一、代码排版规范
代码排版像写字,工整整洁才方便自己和他人阅读修改。
1. 缩进规范
统一用4 个空格缩进,禁止使用 Tab 键;大括号不单独换行,紧跟语句后面;哪怕只有一行代码,也必须加大括号。
目的:分清代码层级,避免后续新增代码出错、逻辑混乱。
❌ 错误示例
// 错误:大括号换行、单行无大括号
if (num > 0)
return true;
// 错误:使用Tab缩进、层级混乱
void test(){
int a=1;
}
✅ 正确示例
// 函数写法
void testFunc() {
// 4空格缩进
int num = 10;
}
// 条件语句写法(单行也带大括号)
if (num > 0) {
return true;
} else {
return false;
}
// 循环语句写法
for (int i = 0; i < 10; i++) {
cout << i << endl;
}
2. 空行使用规范
用空行分隔不同功能的代码,不要密密麻麻挤在一起。函数之间空 2 行,同一函数内不同逻辑、变量声明和执行代码之间空 1 行,禁止连续 3 行及以上空行。
❌ 错误示例
void func1() {
int a=0;
int b=1;
a=a+b;
}
void func2() {
// 连续空行过多
}
✅ 正确示例
#include <iostream>
// 全局变量
int max_num = 100;
// 函数1
void func1() {
// 变量声明
int a = 0;
int b = 1;
// 逻辑执行
a = a + b;
}
// 函数2
void func2() {
cout << "test" << endl;
}
3. 长语句换行规范
一行代码太长必须换行,在逗号、加减乘除、逻辑符号后换行,换行代码对齐,不拆分变量和方法。
❌ 错误示例
// 一行堆砌过长代码,不换行
int res=num1+num2+num3+num4+num5+num6;
// 拆分不合理、对齐混乱
int res = num1
+ num2 + num3;
✅ 正确示例
// 长表达式换行
int res = num1 + num2
+ num3 + num4;
// 多参数函数换行
void calc(int a, int b,
int c, int d) {
}
// 复杂条件换行
if (a > 0 &&
b < 100 &&
c == 10) {
}
4. 空格使用规范
代码适当留空格,看着清爽,统一风格,不随心所欲加空格。
运算符、等号两边加空格;逗号后面加空格;if/for/while 关键字后加空格;数组括号、指针前后不加多余空格。
❌ 错误示例
int a=10+5;
test(1,2,3);
while(a<100){}
int * p = nullptr;
arr[ 0 ] = 10;
✅ 正确示例
int a = 10 + 5;
bool flag = (a > 0);
// 逗号后加空格
test(1, 2, 3);
// 指针写法
int* p = nullptr;
// 循环/条件空格
while (a < 100) {}
5. 无用代码清理规范
所有注释掉的旧代码、测试临时代码、没用到的函数 / 变量,直接删除,不要留在项目里。历史代码可以用 Git 查看,不用注释留存。
❌ 错误示例
// 废弃旧代码,禁止留存
// int oldSum(int a,int b){
// return a-b;
// }
int sum(int a, int b) {
return a + b;
}
✅ 正确示例
// 只保留有效代码
int sum(int a, int b) {
return a + b;
}
二、代码注释规范
注释是解释为什么这么写,不是重复代码内容;代码改了,注释必须同步改,简洁不啰嗦。
1. 基础注释规则
- 禁止一段代码里中英混写;
- 注释和对应代码缩进对齐;
- 单行解释用
//,模块 / 大段复杂说明用/* */,函数说明用文档注释/** */。
2. 特殊场景注释
非常规代码(故意不写 break)必须加注释,避免别人误以为是 bug。
❌ 错误示例
// 无注释,他人看不懂逻辑
switch (state) {
case 1:
func1();
case 2:
func2();
break;
}
✅ 正确示例
switch (state) {
case 1:
func1();
// 故意穿透,无需break
/* FALLTHROUGH */
case 2:
func2();
break;
default:
break;
}
3. 函数注释规范
所有自定义函数上方写简短注释:功能、参数、返回值,方便调用。
❌ 错误示例
// 求和(无效注释,只是复述代码)
int sum(int a, int b) {
return a + b;
}
✅ 正确示例
/**
* @brief 计算两个整数的和
* @param a 第一个整数
* @param b 第二个整数
* @return 两数之和
*/
int sum(int a, int b) {
return a + b;
}
三、命名规范
变量、函数名字一眼看懂用途,不需要额外猜意思。
1. 变量、函数命名
- 局部变量:小写字母 + 下划线;
- 全局变量:加
g_前缀; - 静态变量:加
s_前缀; - 函数名:动词 + 名词,描述做什么操作;
- 布尔变量:用
is_或has_开头。
❌ 错误示例
int a; // 名字含义不明
void func(); // 不知道函数功能
bool flag; // flag指代模糊
✅ 正确示例
int g_system_state; // 全局变量
static int s_count; // 静态变量
int buffer_size; // 局部变量
bool is_ready; // 布尔变量
int calculate_sum(); // 函数
2. 常量、宏、枚举命名
- 宏、枚举值:全部大写,下划线分隔;
- const 常量:使用
k_前缀。
❌ 错误示例
#define num 10
enum mode {normal, debug};
const int maxUsers = 100;
✅ 正确示例
#define MAX_RETRIES (5)
enum MODE {MODE_NORMAL, MODE_DEBUG};
const int k_max_users = 100;
四、其他关键编码规范
1. 结构体成员排布
结构体里变量按占用内存从大到小排序,减少内存浪费。
❌ 错误示例
struct BadStruct {
char c;
int i;
short s;
};
✅ 正确示例
struct GoodStruct {
int i;
short s;
char c;
};
2. 变量初始化
定义变量的时候立刻给初始值,防止出现随机垃圾值。
❌ 错误示例
int counter;
char* buffer;
// 没有初始化,直接使用会出现随机值
✅ 正确示例
int counter = 0;
char* buffer = nullptr;
3. 运算符优先级
复杂表达式,多用括号明确计算顺序,不要靠默认优先级。
❌ 错误示例
result = a << 8 + b * c;
✅ 正确示例
result = (a << 8) + (b * c);
五、总结
我知道自己现在还只是大二,代码写得还不够规范,经常会出现缩进乱、命名随意、注释偷懒的问题。但我希望从现在开始,把这些规则养成习惯:写代码前先想清楚命名,写完后对照规范自查,用工具自动格式化,在写代码时主动按这套标准来。未来我会持续按照这份规范精进自己的代码技术,让自己写出的代码不仅能跑,还要好读、好改、经得起别人 review。
六、参考资料
《Code Styleguide — 优雅的编码规范》
Google 开源项目风格指南(Google C++ Style Guide) https://google.github.io/styleguide/cppguide.html
posted on 2026-09-29 23:49 Cynthia1912 阅读(6) 评论(0) 收藏 举报
浙公网安备 33010602011771号