前言
最近在做loongnix系统下OceanBase的移植工作,因此阅读了一下官方的代码规范,在此做个小结记录一下,重点摘抄了我个人认为比较重要的部分。
更多内容可以访问OceanBase代码风格指南。
代码规范重点记录
1 命名空间。OceanBase 源代码中的所有变量、函数以及类都通过命名空间区分,命名空间和代码所处的目录一一对应。例如,src/common 目录下的 ob_schema.h 文件对应的命名空间为 oceanbase::common。命名空间的内容不要缩进。禁止使用匿名命名空间。
2 using使用情况。因为 using 指令很容易污染作用域,因此,禁止在.h文件中使用 using 指令,但允许在 .h 文件中使用 using 声明。
.cpp 文件中允许使用 using 指令,例如,ObChunkServer实现时需要引用 common 名字空间的类。注意 .cpp 文件只能通过 using 指令引入其它命名空间,.cpp 文件自身的代码需要放到所在的命名空间中。
3 全局常量。全局常量统一定义在 ob_define.h 中,
全局函数统一定义在 common/ob_define.h 和 utility 方法(common/utility.h,common/ob_print_utils.h)中。禁止头文件中定义全局 const 变量和static 变量。
4 局部变量。在语句块开始处(由{}组成)声明变量,强制要求简单变量声明时就初始化。
禁止在循环体内声明非简单变量(例如类变量),另外建议函数栈不超过 32K,单个局部变量不超过 8K。
5 静态变量。禁止头文件中定义静态变量,不允许在 .h 头文件中定义初始化静态变量(无论是不是 const 常量)。注意,是禁止定义(define),不是禁止声明(declare)。
【例外】static const/constexpr 静态成员变量
类里的 static const int(包括 int32_t, int64_t, uint32_t, uint64_t 等),static constexpr double 等静态成员变量,我们常用来定义 hardcode 数组长度等,是不占存储的,没有地址(可以视为 #define 宏常量),允许在头文件中定义初始化。
6 命名规则。避免过度缩写,可以使用大众常见的缩写形式。
类型和变量一般为名词,例如,ObFileReader,num_errors。
函数名通常是命令性的,例如 open_file(),set_num_errors()。
类型命名,使用自描述良好的单词组成。为了和变量区分,建议使用单词首字母大写,中间无分隔符的方式。
嵌套类不需要加 “Ob” 前缀,其它类都需要加 “Ob” 前缀。
接口类需要前面加 “I” 修饰符,其它类都不要加。如: class ObIAllocator
类内变量命名,自描述良好的全小写单词组成,单词之间使用 ’’ 分隔,为了避免与其他变量混淆,要求采用后端加入 ’’ 的方式区分。如:common::ObServer addr_
全局变量命名,全局变量由自描述良好的全小写单词组成,单词之间使用 ’’ 分隔,为标注全局性质,要求在前端加入 ’g’ 修饰符。
globle thread number
int64_t g_thread_number;
存取函数命名,存取函数的名称需要和类成员变量对应,如果类成员变量为 xxx,那么存取函数分别为 set_xxx 和 get_xxx。
常量命名,所有编译时常量, 无论是局部的, 全局的还是类中的, 要求全部使用大写字母组成,单词之间以 ’_’ 分割。例如:static const int NUM_TEST_CASES = 6;
7 函数声明。(1)返回值总是和函数名在同一行。
(2)左圆括号总是和函数名在同一行。
(3)函数名和左圆括号间没有空格。
(4)圆括号与参数间没有空格。
(5)左大括号总是单独位于函数的第一行(另起一行)。
(6)右大括号总是单独位于函数最后一行。
(7)函数声明和实现处的所有形参名称必须保持一致。
(8)所有形参应尽可能对齐。
(9)缺省缩进为 2 个空格。
(10)换行后的参数保持 4 个空格的缩进。
(11)如果函数声明成 const, 关键字const应与最后一个参数位于同一行。
1330

被折叠的 条评论
为什么被折叠?



