59、【OS】【Nuttx】编码规范解读(七)
背景
接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
55、【OS】【Nuttx】编码规范解读(三)
56、【OS】【Nuttx】编码规范解读(四)
57、【OS】【Nuttx】编码规范解读(五)
58、【OS】【Nuttx】编码规范解读(六)
分析了行宽格式,注释要求,花(圆)括号风格,全局变量,结构体,宏定义等,下面继续来分析上次没分析完的结构体
Nuttx 编码规范
指针变量
指针命名
- 指针与其它类型变量命名规则相同,比如变量名全小写,减少使用下划线 _
- 可以加前缀 p(单级指针)或 pp(指向指针的指针),但不推荐,除非指针和其他非指针变量可能会混淆
空格
在声明指针时,星号 * 紧跟变量名,和类型名之间有个空格,示例如下
修饰词
有些架构会要求对指针用修饰词进行限定,来明确指向的内存区域,比如将数据存储和代码存储分开,或者用不同大小的指针来访问不同的内存段
Nuttx 在 include/nuttx/compiler.h 文件中有宏定义来支持这些限定修饰词
从宏定义可见,这些修饰词都是空的,代码运行时不起任何作用,主要就是给开发人员看,用于区分指针指向的内存区域
- FAR:用于指向位于栈、堆、.bss 或.data 段的数据指针
- NEAR:用的很少,先不关注
- DSEG:用的很少,先不关注
- CODE:用于指向函数或代码段的指针
初始化
主要强调初始化要遵循 C89 标准的兼容性要求,比如不允许使用命名初始化和数组指定位置初始化,这些都是C99引入的功能,不符合C89标准
C89 初始化风格
结构体和数组的初始化必须按照成员或元素的声明顺序进行,且每个初始值都必须显式列出
// C89 风格的结构体初始化
struct Point {int x;int y;
};struct Point origin = {0, 0}; // 使用顺序初始化// C89 风格的数组初始化
int numbers[5] = {1, 2, 3, 4, 5};
C99 初始化风格
C99 引入了一些更灵活的初始化方式,如
- 命名初始化:可以通过成员名称来初始化结构体或联合体中的特定字段,而不需要按照声明顺序
struct Point origin = {.y = 1, .x = 2}; // 按名称初始化,不符合 C89
- 指定位置的数组初始化:可以通过索引来初始化数组中的特定元素,未初始化的元素被自动设为 0
int numbers[5] = {[0] = 1, [2] = 3}; // 指定位置初始化,不符合 C89
函数
函数头
注释结构
函数前面都有一个函数头注释,这是一个块注释,该注释有特定的格式要求,确保代码的一致性:
- 注释开始行:以 /* 开头,位于第 1 列,紧接一系列星号 *,延伸到行末 78 列
- 注释结束行:从第 2 列开始,有一系列星号* ,延伸到行尾 77 列,在第 78 列放置闭合注释符号 */
- 信息行:第 1 列空格,第 2 列星号 *,第 3 列空格开始,后面包含关于函数的信息
- 前后空白行:函数头注释前有一个空白行,函数头注释后也有一个空白行,然后是函数定义
注释内容
函数头注释内容包含如下部分,每个部分间用单行 * 分隔
- Name:后面跟函数名,在同一行
- Description:函数描述内容从第二行开始。每行描述缩进两个额外的空格
- Input Parameters:输入参数描述从第二行开始,输入参数从分隔行开始,并缩进两个额外的空格,描述包括参数名,参数简述
- Returned Value:返回值描述从第二行开始,标识可能返回的所有错误值
- Assumptions/Limitations:使用函数时需要注意的附加信息,可选内容
示例如下:
/** *************************************************************************************** Name: myFunction** Description:* This function does something very important.* It takes two parameters and returns a result based on those inputs.** Input Parameters:* param1 - The first parameter is an integer that represents...* param2 - The second parameter is a pointer to a structure that contains...** Returned Value:* ERR_INVAL: Invalid input parameters.* ERR_NOMEM: Memory allocation failed.** Assumptions/Limitations:* This function assumes that the system has enough memory to allocate for its operations.* **************************************************************************************/