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

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.* **************************************************************************************/
http://www.xdnf.cn/news/675433.html

相关文章:

  • 【Python中的self】Python中的`self`:从基础到进阶的实战指南
  • roo code调用手搓mcp server
  • Python filter()函数详解:数据筛选的精密过滤器
  • 在promise中,多个then如何传值
  • sqli_labs第二十九/三十/三十一关——hpp注入
  • 《计算机组成原理》第 6 章 - 计算机的运算方法
  • 大模型的参数高效微调;大模型的对齐
  • Linux显示进程状态——ps命令详解与实战
  • 用C#最小二乘法拟合圆形,计算圆心和半径
  • chrome打不开axure设计的软件产品原型问题解决办法
  • 尚硅谷redis7 41-46 redis持久化之AOF异常恢复演示
  • 从零开始理解机器学习:知识体系 + 核心术语详解
  • 从中控屏看HMI设计的安全与美学博弈
  • FileZillaServer(1) -- 记录
  • Git 克隆别人的远程仓库以后,推到自己的远程仓库
  • BSRN地表基准辐射网数据批量下载
  • SQL基础教程:第一章与第二章内容总结(新手入门指南)
  • 文档注释:删还是不删
  • 关于 smali:3. Smali 与 APK 结构理解
  • LWIP 中,lwip_shutdown 和 lwip_close 区别
  • 深入剖析Java CompletableFuture:原理、陷阱与高并发场景优化指南
  • R语言基础| 可视化初探(ggplot2)
  • 预测式外呼与自动外呼的区别
  • 【博客系统】博客系统第十弹:实现对数据库存储的用户密码进行加密功能、更新登录接口的密码校验功能
  • 【监控】pushgateway中间服务组件
  • openresty+lua+redis把非正常访问的域名加入黑名单
  • threejs顶点UV坐标、纹理贴图
  • SQL Server 和 MySQL 对比
  • 实现单例模式的6种方法(Python)
  • 开源多模态新标杆——BAGEL本地部署教程:7B参数撬动万亿数据