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

55、【OS】【Nuttx】编码规范解读(三)

背景

接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
分析了行宽格式,注释要求等,下面继续来分析

Nuttx 编码规范

注释

右侧长注释

在这里插入图片描述

  • 语句,数据定义右侧的注释必须简短,并且不应超过规定限制 78 个字符
  • 如果需要更长的注释,要把注释放在语句或定义的上方,而不是右侧

拆分长注释到右侧

在这里插入图片描述
可以接受将较长的注释拆分放到语句或数据定义的右侧,但不鼓励,需遵循以下规则

  • 多行右置注释的第一行以注释起始定界符 (/*) 开头
  • 后续每行都以一个星号 (*) 开头,并且这些星号应在同一列对齐
  • 最后一行的注释结束定界符 (*/) 应与星号在同一行,并且星号也应与其他行中的星号对齐在同一列(这是唯一和上方注释不同的地方,上方注释的结束定界符需单独成行)
    举例如下

在这里插入图片描述

C风格注释

在这里插入图片描述

  • C99/C11/C++风格的注释(即使用//开头的单行注释)不应在NuttX项目中使用
  • NuttX项目遵循C89标准,所有不在架构特定目录下(就是为了新特性开的目录)的代码必须兼容C89标准,以保持代码的一致性和兼容性

临时禁用

在这里插入图片描述

  • 不要使用C或C++风格的注释来禁用大段代码:通常,开发人员可能会使用 /* */(C风格注释)或 //(C++风格注释)来注释掉一大段代码以暂时不编译这部分代码,这种方法在嵌套注释的情况下容易出错
  • 建议使用 #if 0 来代替临时禁用代码:推荐使用预处理指令 #if 0 和对应的 #endif 来包围想要禁用的代码块,这样可以避免由于注释嵌套引起的潜在问题,并且更清晰明了
  • 在 #if 0 前添加解释性注释:使用#if 0时,要在前面加上注释,说明为啥这些代码块被禁用了,以帮助其他开发人员理解原因,增加代码的可维护性和可读性

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

花括号

在这里插入图片描述

Nuttx 项目中花括号的使用和 GNU 编码规范 类似,但也有点细小的差别

  • 单独成行:左右花括号 {} 要独占一行,除了空白字符外不要包含其他任何内容
  • 不要将注释放到花括号所在行上
  • 在 Nuttx 规范中,由左花括号开始,接着一系列语句,最后以右花括号结束的代码块被称为复合语句
  • 当存在嵌套的复合语句导致连续出现多个右花括号时,每个右花括号必须独占一行,并且需要适当缩进,以匹配对应的左花括号

规则要求右花括号后面要有一个空行,除了下面两种例外情况:

  • 有多个连续的右花括号时,除了最后一个右花括号之外,其他的右花括号不要有空行
  • 如果右花括号后面紧跟着一个break;语句,则不要留出空行

举例如下
在这里插入图片描述
在这里插入图片描述
这里花括号的写法有点奇怪,其实这是 GNU 风格。在编程中,花括号风格(Brace Style)指的是如何放置代码块的花括号 {},不同的风格有不同的约定,常见有如下三种风格:

K&R 风格:得名于C语言的发明者 Brian Kernighan 和 Dennis Ritchie,特点如下:

  • 左花括号 { 紧跟在控制语句(如 if、for、while 等)后,与之位于同一行
  • 右花括号 } 单独放在控制结构结束的一行
  • 函数定义时,左花括号独立成行
if (condition) {// code block
}
...
void function(...)
{// code block
}

该命名风格紧凑且不会浪费空间,推荐!

Allman 风格:以程序设计师Eric Allman的名字命名,特点如下:

  • 左花括号 { 总是放在控制语句的下一行,不与控制语句在同一行
  • 右花括号 } 单独放在控制结构结束的一行
if (condition)
{// code block
}

GNU 风格:在 Allman 风格的基础上,花括号需要额外多一次缩进,效果如下(截取于 GNU 编码规范 )
在这里插入图片描述
此外,GNU 风格还特别推荐使用 #if 0 来注释掉大段代码而不是使用 /* */ 或 // 注释,这点在前面提过

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

相关文章:

  • 信息系统监理师第二版教材模拟题第二组(含解析)
  • 从软件到硬件:三大主流架构的特点与优劣详解
  • 大学之大:杜伦大学2025.5.4
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.1 日期时间标准化(时区转换/格式统一)
  • Runnable组件容灾回退机制 with_fallback 深度解析降低程序错误率
  • 基于PHP实现的easy管理系统
  • 委托构造函数是什么?
  • 如何使用责任链模式优雅实现功能(滴滴司机、家政服务、请假审批等)
  • idea内存过低 设置 Maximum Heap Size 终极解决方案
  • ReentrantLock实现公平锁和非公平锁
  • 【毕设通关】——Word交叉引用
  • 聊聊对Mysql的理解
  • 《AI大模型应知应会100篇》第48篇:构建企业级大模型应用的架构设计
  • PiscTrace针对YOLO深度适配:从v8到v12
  • vue3 - keepAlive缓存组件
  • Python变量作用域陷阱:为什么函数内赋值会引发_局部变量未定义
  • C++多态(上)
  • 互联网大厂Java求职面试:核心技术点深度解析
  • 12.Excel:查找替换
  • 单例模式(Singleton Pattern)
  • Three.js在vue中的使用(二)-动画、材质
  • 深入解析 MQTT 协议:物联网通信的基石
  • Flink基础整理
  • 实验三 触发器及基本时序电路
  • js逆向绕过指纹识别
  • 打电话玩手机检测数据集VOC+YOLO格式8061张1类别
  • PostgreSQL 的 pg_stat_file 函数
  • 【MySQL数据库】用户管理
  • AUTOSAR_BSW_从入门到精通学习笔记系列_EcuM
  • 网络Tips20-003