第四章:代码规范与风格

说实话,代码规范这事儿,刚入行的时候我也觉得烦。

不就是能跑就行吗?干嘛非得管大括号放哪、变量叫啥名?

直到有一次,我接手了一个离职同事的项目。打开代码一看——好家伙,一个函数两千行,变量名全是 a1、b2、tmp。我花了整整三天才理清楚它到底在干嘛。从那以后,我再也不敢轻视代码规范了。

核心观点:代码规范不是束缚,而是团队协作的基石。它让代码可读、可维护、可交接。

4.1 Google C++ Style Guide:行业标杆

Google C++ Style Guide 是目前业界最广泛采用的规范之一。我自己的团队也直接拿它当蓝本,只做了少量调整。

为什么选它?因为它考虑得非常全面——从命名、注释、格式,到头文件组织、类设计、异常处理,几乎覆盖了所有日常场景。

几个关键点

  • 头文件:每个 .cc 文件都应该有一个对应的 .h 文件。头文件里不要放实现,除非是内联函数或模板。
  • 包含顺序:先自己的头文件,再 C 库、C++ 库、第三方库、项目内其他模块。这样能尽早发现头文件依赖问题。
  • 禁止使用 using namespace std; 尤其是在头文件里。我见过因为这个导致命名冲突的惨案,排查起来非常痛苦。

我的习惯:团队新成员入职,我会让他们先通读一遍 Google Style Guide,然后一起 review 几段代码。这样上手快,也容易统一认知。

4.2 命名规范:见名知意

命名是代码的「脸面」。好的命名,看一眼就知道它是干什么的。

类型 规范 示例
变量 snake_case int user_count;
函数 PascalCase void GetUserInfo();
类 PascalCase class UserManager;
常量 kPascalCase const int kMaxRetry = 3;
宏 UPPER_CASE #define MAX_BUFFER 1024

嗯,这里要注意:不要用缩写。除非是业界公认的(比如 tmp、idx),否则一律写全称。我曾经见过一个 int usr_cnt,三个人猜了三种意思。

4.3 注释规范:写给人看的

注释不是越多越好。好的注释解释「为什么」,而不是「是什么」。

// 错误示范:废话注释
int i = 0;  // 将 i 赋值为 0

// 正确示范:解释意图
// 使用二分查找,因为数据已排序
int index = BinarySearch(sorted_array, target);

我常用的注释原则

  • 公共接口必须注释:函数、类、枚举、模板参数。用 Doxygen 风格,方便生成文档。
  • 复杂逻辑加注释:比如算法核心步骤、边界条件处理。
  • TODO 和 FIXME 要带责任人:比如 // TODO(zhangsan): 优化性能,不然没人会去改。

避坑指南:我曾经在一个项目里看到大量「注释掉的代码」,说是「留着以后参考」。结果三年没人动过,也没人敢删。我的建议是:不要注释代码,直接删掉。版本控制系统会帮你记住历史。

4.4 代码格式化工具:clang-format

手动对齐代码?太累了,而且容易出错。

clang-format 就是干这个的。你只需要写一个 .clang-format 配置文件,然后一键格式化整个项目。

基本用法

# 格式化单个文件
clang-format -i main.cpp

# 格式化整个目录
find . -name "*.cpp" -o -name "*.h" | xargs clang-format -i

常用配置项

BasedOnStyle: Google
IndentWidth: 2
ColumnLimit: 80
AllowShortFunctionsOnASingleLine: Inline
BreakBeforeBraces: Attach

我个人习惯把 .clang-format 文件放在项目根目录,然后在 CI 流程里加一步格式化检查。这样所有人都能保持一致风格,谁也别想偷懒。

小技巧:在 VS Code 或 CLion 里配置保存时自动格式化。这样你写代码时完全不用操心格式,写完保存,它自动帮你整理好。

4.5 知识体系总览

下面这张图是我自己整理的代码规范知识结构,你可以把它当作一个检查清单。

代码规范与风格 Google Style Guide 头文件组织 包含顺序 禁止 using namespace 命名规范 snake_case 变量 PascalCase 函数/类 kPascalCase 常量 注释规范 解释为什么 公共接口必注 TODO 带责任人 clang-format 配置文件 .clang-format CI 格式化检查 保存时自动格式化 目标:可读、可维护、可交接 工具 + 规范 + 习惯 = 高质量代码

4.6 总结

代码规范这件事,说白了就是「约定大于配置」。大家统一一套规则,沟通成本就降下来了。

我个人建议:先选一个成熟的规范(比如 Google 的),然后用工具(clang-format)强制执行,最后在 code review 里持续打磨。

别想着一步到位。规范是慢慢养成的习惯,不是一天建成的罗马。

可可精品资料库