57、【OS】【Nuttx】编码规范解读(五)
背景
接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
55、【OS】【Nuttx】编码规范解读(三)
56、【OS】【Nuttx】编码规范解读(四)
分析了行宽格式,注释要求,花(圆)括号风格,全局变量等,下面继续来分析
Nuttx 编码规范
函数参数和局部变量
- 函数参数和局部变量命名规则相同
- 命名要简洁,避免过于冗长的名字,比如 len 优于 lengthofiobuffer
- 避免单字符变量名,除了 i,j,k 这些用于循环索引
- 局部变量不需要特殊的前缀,但可以使用前缀 p 或 pp 来表示指针或指向指针的变量
- 变量名全部小写,减少下划线的使用
举例如下
这里 & lt; 是 HTML 或 XML 中用于表示小于号(<)的实体引用,网站显示有点问题,主要就是 for (i = 0; i < limit; i++)
类型定义
- 命名简短
- 所有 typedef 定义的类型名以 _t 结尾,表示这是一个通过 typedef 定义的类型,如 fhandle_t、point_t 等
- 模块名称前缀,全部小写字母,减少使用下划线这些都是前面讲过的
举例如下
结构体
结构体命名
1、 所有结构体必须命名,即使它们是类型定义的一部分,关键字 struct 后面必须跟随一个结构体名称,比如下面的写法在 Nuttx 里是不推荐的
struct {uint8_t a;uint8_t b;
} ab = { 0U, 0U};
但也有两个例外:
- 如果结构体在另一个联合体(union)或结构体内定义的(不推荐),可以省略结构体名称
- 如果结构体是局部变量类型,也可以省略结构体名称
2、 避免嵌套定义结构体,可以在包含结构体内部定义其他结构体,但不推荐,除非必要
3、 结构体字段必须命名,结构体内的字段如果是另一个结构体类型,则该字段必须有名称。C11 允许无名结构体字段,但 Nuttx 遵循 C89 标准,不允许无名结构体字段
在C11标准中,确实引入了匿名结构体和联合体的支持,这种特性可以使代码更加简洁,并且可以直接访问内部结构体成员,就像它们是外部结构体的直接成员一样
举例如下
struct Person {char firstName[50];char lastName[50];// 匿名结构体字段struct {char street[50];char city[50];char state[20];}; // 匿名结构体,没有名称int age;
};int main() {struct Person person;// 直接初始化匿名结构体的字段snprintf(person.street, sizeof(person.street), "123 Elm St");snprintf(person.city, sizeof(person.city), "Springfield");snprintf(person.state, sizeof(person.state), "IL");...return 0;
}
- 这个例子中,struct Person 中包含了一个匿名结构体,用于存储地址信息(如街道、城市,省份等等)。由于它是匿名的,其成员(如 street, city, state)可以直接作为 struct Person 的一部分被访问
- 开发人员可以直接通过 person.street, person.city 和 person.state 访问这些匿名结构体中的成员,而不需要通过一个中间的名字来引用
虽然 C11 允许,但 Nuttx 不推荐这样做,要避免使用匿名结构体,有如下原因:
- 可移植性:不是所有的编译器都完全支持 C11 的所有特性,比如一些旧版本或特定平台上的编译器
- 代码清晰度:虽然匿名结构体可以使代码看起来更简洁,但也可能不利于代码的可读性和可维护性,特别是对于不熟悉这种语法的人
先分析到这儿,下次再接着分析