当前位置: 首页 > news >正文

58、【OS】【Nuttx】编码规范解读(六)

背景

接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
55、【OS】【Nuttx】编码规范解读(三)
56、【OS】【Nuttx】编码规范解读(四)
57、【OS】【Nuttx】编码规范解读(五)
分析了行宽格式,注释要求,花(圆)括号风格,全局变量,结构体等,下面继续来分析上次没分析完的结构体

Nuttx 编码规范

结构体

结构体命名

在这里插入图片描述
接上篇 blog 57、【OS】【Nuttx】编码规范解读(五)

4、 避免在类型定义中定义结构体,推荐将结构体定义和类型定义分开,以减少头文件之间的依赖关系,此时结构体指针可以通过前向引用的方式在头文件中声明,而不需要包含定义类型的文件
举例如下:

// module_a.h
struct module_b_struct;  // 前向声明
typedef struct module_b_struct* ModuleBHandle;	// 类型定义
void functionUsingModuleB(ModuleBHandle handle);// module_b.h
struct module_b_struct {int data;// 其他成员...
};	// 结构体定义

在这种情况下,module_a.h 不需要包含 module_b.h,只需前向声明即可,这样可以减少头文件之间的依赖关系,加快构建速度,但也会有弊端,假如结构体名字改了,要改很多头文件(霰弹式修改)

5、所有结构体名后缀以 _s 结尾

6、老生常谈的命名简洁,模块名称前缀,字母小写,减少使用下划线

结构体字段命名

在这里插入图片描述

  • 结构体字段命名和局部变量命名规则相同
  • 每个结构体字段(包括位字段)应在单独的一行中定义
  • 每个结构体字段都应该有对应的注释,解释用途和含义,注释遵循之前提到过的规则
  • 小写字母,少用下划线

举例如下
在这里插入图片描述
可以用 typedef 为结构体创建别名,但不推荐
在这里插入图片描述
在这里插入图片描述
虽然可以在另一个结构体内定义结构体,但前提是这些内部结构体必须有命名字段,但一般情况下不推荐这样做,而是将结构体定义分开,避免嵌套定义
在这里插入图片描述

联合体

结构体名后缀以 _u 结尾,其他规则和结构体一样

可以用 typedef 为联合体创建别名,但不推荐
在这里插入图片描述
在 Nuttx 中,通常不推荐使用单字符的变量名或字段名,但对于结构体中的联合体字段(union fields)l例外,联合体字段常用 u 作为字段名,这样可以保持字段名称简短,并防止由于联合体内成员的名字过长而使代码可读性下降
在这里插入图片描述

枚举

枚举类型命名

枚举类型名后缀以 _e 结尾,其他规则和结构体,联合体一样

枚举值命名

在这里插入图片描述

  • 所有枚举值必须使用大写字母
  • 与其它命名规则不同,推荐在枚举值名称中使用下划线字符 _ 来分隔单词,提高可读性
  • 枚举值推荐有个大写前缀,前缀标识该值属于哪个枚举类型。前缀最好来源于枚举类型名
  • 枚举列表的最后一个值后面不要有逗号

示例如下
在这里插入图片描述

宏定义

宏命名

在这里插入图片描述

  • 宏名全部使用大写字母
  • 推荐使用下划线 _ 分隔单词,提升可读性
  • 相关宏以相同的前缀开头,表示属于一个集合,减少命名冲突
  • 特殊情况才用小写,比如 VOLTAGE_3p3V,p 代表小数点,CONFIG_NET_IPv6,v 表示版本号
  • 函数式宏命名可以用小写风格
  • #define 后只有一个空格,不要用 Tab
  • 多行宏使用 \ 换行
  • 多行宏的 \ 不用对齐,会增加维护难度
  • 宏参数在替换时应始终用括号包裹,防止运算符优先级问题
  • 如果宏执行多个操作,要用 do { … } while (0) 包裹
  • 不具备直观意义的魔鬼数字必须用宏或枚举定义,不能直接写在代码中
  • 宏是简单的文本替换,要注意其副作用

举例如下:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • java每日精进 5.26【本地缓存】
  • Java----自动装箱和自动拆包 与 泛型
  • 基数排序---Java版本
  • springboot上传文件
  • 浏览器指纹科普 | 语言 vs 界面语言,区别是什么?
  • 解锁集成电路制造新建项目的防震黑科技-江苏泊苏系统集成有限公司
  • 纯彩天气隐私政策
  • java高级 -动态代理
  • unix的定时任务和quartz和spring schedule的cron表达式区别
  • 信息论基础理论与应用全面指南
  • 前端配置nginx代理
  • 原生js实现数据响应方法2.0
  • 深度学习入门(十三):加深网络
  • Linux Docker 安装oracle19c数据库教程
  • 【算法提升】牛牛冲钻五 最长无重复子数组 重排字符串 one_day
  • 热点数据的统计到应用
  • 【Sqoop基础】Sqoop定位:关系型数据库与Hadoop生态间的高效数据桥梁
  • RabbitMQ 集群与高可用方案设计(三)
  • 如何用AI设计LOGO,DeepSeek+豆包免费批量生成
  • 【图论 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+
  • 宿州做网站的有吗/沈阳cms建站模板
  • 上海自适应网站开发/培训机构退费纠纷一般怎么解决
  • 成都微信小程序制作/肥城市区seo关键词排名
  • flash制作网站教程/东莞网站制作十年乐云seo
  • 网站的建设费用预算策划书/seo服务 文库
  • 做网站的工具怎么使用/网络营销的主要推广方式