好的标准?
- 标准容易记住,也容易实践;
- 积极维护和更新,确保标准符合业务发展和技术发展;
- 多消耗写代码者的精力,确保读代码者的体验;
- 标准要整体一致,方便写自动化的格式检查工具;
- 参照国际标准,但不需要全盘接纳,可以禁用某些标准库并使用更好用、更统一的第三方库;
- 不要使用风险较大的语言功能;
- 在优化性能时,允许降低代码可读性、允许使用危险功能;
- 避免复杂的类结构和其他数据结构;
- 代码规模越大,注意的事情越多,标准也会越多;
C++版本
- 使用主流C++版本(C++17)开发
- C++20、C++23还在被编译器实现中,部分已经稳定的功能可以使用
- 不要使用特定编译器的独有功能,除非特殊说明并附带详细注释
头文件和文件头
- 源码文件建议统一以
.cc
结尾
- 每一个源码文件都应该对应一个与其同名的
.h
文件
- 单元测试文件除外
- 小程序(行数很少,且包含
main()
函数)除外
- 头文件应彼此独立
- 需要带有
#define
类似的 包含保护,避免循环包含 问题
- 头文件内应include所有 被该头文件本身 和 被该头文件对应的.cc依赖的 所有其他头文件
- 例外:如果是将include用作文本插入,则待插入的文本应单独存为.inc文件,然后在适当位置#include “xxx.inc”
- 包含保护:#define 项目路径(每一个子路径用下划线分割)_文件名_H_
- 例如:
#define SRC_WEB_HTTP_H_
,即src/web/http.h
- 不要使用前置声明
- 函数小于10行,或必须使用内联函数时,才应该在头文件内定义内联函数
- #include的顺序
- 第一位:优先头文件,例如a.cc对应a.h,则这个位置应该放a.h
- 第二位:C系统头,包括C自带的头文件和操作系统等使用C语言格式的头文件(系统路径),可加extern关键字
- 第三位:C++系统头,包括C++自带头文件、STL、其他C++库的头文件(系统路径)等
- 第四位:其他库的.h文件(不在系统路径)
- 第五位:同项目的.h文件(不在系统路径,且除去优先头文件)
- [[TODO]]