60、【OS】【Nuttx】编码规范解读(八)
背景
接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
55、【OS】【Nuttx】编码规范解读(三)
56、【OS】【Nuttx】编码规范解读(四)
57、【OS】【Nuttx】编码规范解读(五)
58、【OS】【Nuttx】编码规范解读(六)
59、【OS】【Nuttx】编码规范解读(七)
分析了行宽格式,注释要求,花(圆)括号风格,全局变量,结构体,宏定义,指针等,下面继续来分析上次没分析完的结构体
Nuttx 编码规范
函数
函数命名
- 函数名要简洁,并能清晰描述函数功能
- 函数名全小写
- 同一模块的所有函数要有一个共同前缀,前缀与函数名之间用下划线 _ 分隔
- 对于更大的功能集合,可以在命名中扩展增加一层前缀,比如模块 xyz 包含一组管理 I/O 缓冲区的函数,则这些函数可以用共同前缀 xyz_iob_ 开头
- 避免过多使用下划线
- 函数名的其余部分采用动词-对象(verb-object)或对象-动词(object-verb)的形式,只要在同一模块内保持一致性即可,常见的动词包括 get 和 set(或 put),分别用于获取和设置数据的操作,动词 is 用于表示返回布尔值
参数列表
推荐使用 const 关键字来修饰参数,表示该参数不会被修改
函数体
- 函数体由一个单一的复合语句组成,即用大括号包裹的一组语句
- 包裹的大括号独占一行
- 函数体内语句相对于大括号要缩进两个空格
- 局部变量首先定义(Local variables first):Nuttx 遵循 C89 标准,所有局部变量要集中在函数体开头定义,不能在可执行语句之间插入局部变量定义,局部变量定义后要跟一个空行,以分隔变量定义和后续的可执行语句
- 函数实现不要过长,一般而言,函数长度限制在一个页面内,以便于阅读和维护
- return 的参数不要用圆括号包裹,除非是复杂的表达式,简单的算术运算不要用圆括号
- 函数体结束的右大括号后应跟随一个(有且仅有一个)空行
示例如下
返回值
1、操作系统内部函数
- 使用 int 类型返回值表示成功或失败
- 非负数表示成功,一般返回值为 0 表示成功
- 负数表示错误,这些负数必须是 nuttx/include/errno.h 文件中定义的标准错误码,以确保一致性和可读性(实际上标准错误码是正数,兼容 linux/include/asm-generic/errno-base.h ,用的时候需要用户手动添加个负号)
2、OS 接口规范 - 遵循标准,几乎所有操作系统接口都有相应的标准(例如 POSIX 标准),这些标准详细规定了接口的功能、参数、返回值等细节
- 这些标准的优先级高于内部编码规范,涉及到接口设计和实现时,应该首先参考并遵守这些标准,而不是仅仅依赖内部的编码规范,这样做可以保持 Nuttx 的兼容性和一致性
3、 返回值检查
- 调用操作系统内部函数时,调用者应该始终检查返回值,以确定是否发生了异常,忽略返回值是不安全的,容易导致潜在的问题
- 对于 malloc 或 realloc 等内存分配函数的调用,必须检查其返回值,避免使用空指针
语句
一行一条语句
- 每行代码应该只包含一个语句,不应在同一行上放置多个语句
- 每条语句只能有一个赋值操作,不能包含多个赋值操作,以提高代码可读性和可维护性
- 语句不要与任何C语言关键字(如if, else, for, while, do, switch等)或 case 选择器在同一行,以保持代码结构清晰,增强可读性
示例如下