Google编码规范

好的标准?

  • 标准容易记住,也容易实践;
  • 积极维护和更新,确保标准符合业务发展和技术发展;
  • 多消耗写代码者的精力,确保读代码者的体验;
  • 标准要整体一致,方便写自动化的格式检查工具;
  • 参照国际标准,但不需要全盘接纳,可以禁用某些标准库并使用更好用、更统一的第三方库;
  • 不要使用风险较大的语言功能;
  • 在优化性能时,允许降低代码可读性、允许使用危险功能;
  • 避免复杂的类结构和其他数据结构;
  • 代码规模越大,注意的事情越多,标准也会越多;

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]]
评论