当前位置: 首页 > 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.* **************************************************************************************/

相关文章:

  • 【MQTT】TLS证书双向验证
  • ROS2 robot控制学习(一)
  • Java 并发编程通关秘籍——08死锁
  • STL-Library-Containers
  • Acrobat Reader 无法在 Windows 11及10 中打开的5种修复方法
  • 岛津Sonialvision X-ray X射线高压发生器控制台
  • RuoYi前后端分离框架集成Jasypt实现配置信息加密
  • C语言创意编程:用趣味实例玩转基础语法(2)
  • Redis工作原理解析
  • 学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙
  • BERT和GPT语言模型的核心差异
  • How API Gateways handle raw TCP packets
  • 【深度学习-Day 18】从SGD到Adam:深度学习优化器进阶指南与实战选择
  • CentOS 7.0重置root密码
  • 【Marp】自定义主题 - box01
  • 【第1章 基础知识】1.2 Canvas 的绘图环境
  • iPaaS集成平台如何赋能智能体搭建
  • 【递归、搜索与回溯算法】专题一 递归
  • 创意编程:用Python打造粒子爱心烟花秀
  • JavaScript面试题之箭头函数详解
  • 类网站建设/互联网推广中心
  • 京东优惠劵网站怎么做/百度推广关键词多少合适
  • 赤峰做网站公司/百度推广销售话术
  • 广州市建设集团网站首页/交换友情链接时需要注意的事项
  • .net招聘网站怎么做/网站关键词排名查询
  • 天河手机网站建设/宁波seo外包方案