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

53、【OS】【Nuttx】编码规范解读(一)

背景

nuttx 源码工程目录下有个 CONTRIBUTING.md 文件,里面有一段话:
在这里插入图片描述
作为 nuttx 项目的参与者,应该遵循 nuttx 的编码规范要求,提交的代码将会被 Github 持续集成系统检测,不符合要求的代码,将会被门禁拦下,nuttx 编码规范参考 [NuttX C Coding Standard]

Nuttx 编码规范

检测工具

下面就来看下 nuttx 的编码规范要求:
在这里插入图片描述
这里 nuttx 提供了一个 nxstyle 编码风格的检测工具 checkpatch.sh , 位于 tools/ 目录下,用户可手动,或者通过 pre-commit 钩子函数在本地自动化部署检测机制,确保在每次提交之前,都能检测一遍编码风格是否符合 nuttx 要求

检测工具的使用方法如下:
在这里插入图片描述
提供了 -g (基于 commit 的检查)和 -f (基于文件的检查)

文件组织架构

文件扩展名

nuttx 是基于C语言的,所以源文件用 .c,头文件用 .h

文件头注释

在这里插入图片描述

所有的比如 C,C++,makefile,或脚本都应该遵循如下文件头原则:

  • 相对路径:从项目的顶级目录到该文件的相对路径
  • 可选描述:简要描述文件的内容(如果需要),限制为一行
  • 空行:描述之后插入一个空行
  • 版权声明:NuttX 标准 Apache 2.0 版权声明

分组,块注释

在这里插入图片描述

  • 在源文件或头文件中,所有相似的组件应该被分组在一起
  • 定义不应随意出现在文件中,而是将类似的定义放在一起,并在前面加上一个块注释标识该分组

块注释的格式要求:

  • 由 /* 开始,后面跟一系列星号(*),延伸到行末第 78 列(块内的注释不能超过第 78 列)
  • 分组名称从第 4 列开始,前面第 1 列有星号(*),第 0 列是空格
  • 结尾行从第 1 列开始,后面跟星号(*)一直到第 78 列 */ 结束注释

示例如下

/***************************************************************************** Public Functions****************************************************************************/

组名称遵循顺序如下:
在这里插入图片描述

大文件和小文件的块注释的有些许不同:

  • 大文件:即使某个分组是空的,也应该包含块注释,以提供重要的信息,表明该部分是预留的
  • 小文件:可以省略一些块注释,以避免块注释比实际内容还要大的尴尬情况

头文件幂等性

在这里插入图片描述

  • 头文件必须防止多次包含导致的重复定义问题;通过在文件顶部添加宏定义,确保即使头文件被多次包含,其内部定义也只会被处理一次
  • 位置:预处理器条件逻辑应该放在文件头部,位于文件头注释和“包含的文件”块注释之间,规范的例子没体现出来,举例如下:
/***************************************************************************** nuttx/nuttx_arch.h* ....****************************************************************************/#ifndef __INCLUDE_NUTTX_ARCH_H
#define __INCLUDE_NUTTX_ARCH_H/***************************************************************************** Included Files****************************************************************************/#include <nuttx/config.h>
#include <stdio.h>
....
  • 尽管文件顶部有预处理逻辑,但文件内的其他定义不要因此有缩进
  • 预处理器宏名称根据头文件相对于顶级目录的完整路径形成,每个无效于宏定义的字符(比如 /)会被替换为下划线 _。比如,__INCLUDE_NUTTX_ARCH_H 对应于 include/nuttx/arch.h 文件
http://www.xdnf.cn/news/269461.html

相关文章:

  • [蓝桥杯真题题目及解析]2025年C++b组
  • 计组复习笔记 3
  • 《计算机系统结构》考题知识点整理
  • 经典算法 求解台阶问题
  • 【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
  • AUTOSAR图解==>AUTOSAR_SRS_CoreTest
  • Python----卷积神经网络(LeNet-5的手写体识别)
  • 降维大合集
  • 使用PageHelper实现分页查询(详细)
  • 【多线程】计算机工作原理、操作系统(内含进程、PCB属性、进程调度、内存分配、进程间的通信) —— 简单介绍
  • Nginx相关知识
  • Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows]
  • 突破养生误区迷障,开启科学养生新程
  • Pytorch-CUDA版本环境配置
  • 实验-组合电路设计1-全加器和加法器(数字逻辑)
  • 冒泡排序详解:从零理解其核心思想与循环设计原理
  • 【信息系统项目管理师-论文真题】2012下半年论文详解(包括解题思路和写作要点)
  • 2025年 蓝桥杯省赛 Python A 组题目
  • 使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例
  • 回溯算法详解(Java实现):从组合到排列的全面解析
  • 方案解读:华为-智慧园区数字平台技术方案【附全文阅读】
  • 安卓基础(MediaProjection)
  • Qt/C++源码/实时视音频通话示例/极低延迟/可外网通话/画中画/支持嵌入式板子
  • 赛季7靶场 -- Checker --User flag
  • 一键部署自己的私域直播
  • 生物化学笔记:神经生物学概论08 运动系统 人类逐渐建立运动技能 不同层次的运动发起
  • 第43周:GAN总结
  • python下载
  • CGI 协议是否会具体到通讯报文?
  • 节流 和 防抖的使用