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

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 选择器在同一行,以保持代码结构清晰,增强可读性

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

http://www.xdnf.cn/news/9360.html

相关文章:

  • 8天Python从入门到精通【itheima】-49~50
  • SOC-ESP32S3部分​​​​​​​:15-PWM脉冲宽度调制
  • 使用 curl 进行 HTTP 请求:详尽指南
  • MATLAB绘制滤波器系数特性图
  • vue+threeJs 创建多色几何体+加载obj模型+跳转ojb模型中心
  • WPF【10_1】数据库与WPF实战
  • Blaster - Multiplayer P107-PXXX: 弹药
  • 四、web安全-行业术语
  • C++11 -- 右值引用和移动语义
  • 注意力机制模块代码
  • Oracle 12c新增的数字转换验证VALIDATE_CONVERSION函数
  • rabbitmq的高级特性
  • 理解 Kubernetes 的架构与控制平面组件运行机制
  • WebSocket学习总结
  • Python Day34 学习
  • 深度学习能取代机器学习吗?
  • 庄家抬轿指标,通达信炒股软件副图指标公式,指标使用图文教程
  • Linux Ubuntu24.04配置安装MySQL8.4.5高可用集群主从复制!
  • AI 编程如何让你轻松采集网站数据?
  • GitHub 趋势日报 (2025年05月26日)
  • 体现物联网环境下安全防护的紧迫性 :物联网环境下的个人信息安全:隐忧与防护之道
  • 【Spring AI】Spring AI 1.0.0-M7、M8更新至1.0.0版本兼容的所需修改要点
  • 【ARM】如何通过ARMDS的Map文件查看堆栈调用情况
  • 【MAP容器姓名成绩输入查询修改删除】2022-2-4
  • 5 WPF中的Page页面的使用
  • 2.3 TypeScript 非空断言操作符(后缀 !)详解
  • C++中回调函数详解
  • javaEE1
  • 【JavaEE】-- 文件操作和IO
  • FART 自动化脱壳框架一些 bug 修复记录