62、【OS】【Nuttx】编码规范解读(十)
背景
接之前 blog
53、【OS】【Nuttx】编码规范解读(一)
54、【OS】【Nuttx】编码规范解读(二)
55、【OS】【Nuttx】编码规范解读(三)
56、【OS】【Nuttx】编码规范解读(四)
57、【OS】【Nuttx】编码规范解读(五)
58、【OS】【Nuttx】编码规范解读(六)
59、【OS】【Nuttx】编码规范解读(七)
60、【OS】【Nuttx】编码规范解读(八)
61、【OS】【Nuttx】编码规范解读(九)
分析了行宽格式,注释要求,花(圆)括号风格,全局变量,结构体,宏定义,指针,结构体,switch,while 语句等,下面继续分析
Nuttx 编码规范
do while 语句
- do 和 while 关键字各自单独占一行
- 跟在 do 后的语句必须始终用大括号包裹,即使只有一条语句或没有语句
- while 关键字与条件在同一行并用一个空格隔开
- 结束的 while 语句后要跟一个空白行,除非嵌套在另一个复合语句内
示例如下
goto 语句
- 要限制使用 goto 语句,通常 goto 语句是被禁止使用的,除非用于处理复杂嵌套逻辑中的错误条件。在这种场景下,简单的 goto 可以显著提高代码的可读性,简化复杂度
- 所有标签必须全部小写,允许使用下划线字符 _ 来分隔较长的标签名
- 常见的错误退出标签通常命名为 errout,如果需要撤销之前分配的资源或执行其他清理操作,可能需要多个不同的错误标签,比如 errout_with_allocation、errout_with_openfile 等
- 标签不要缩进,必须始终从第一列开始
示例如下
C++ 规范
- Nuttx 在 C++ 上没有一个完整的标准规范,这里只给出一些基本指导原则
- 目前没有要求遵循特定的 C++ 版本,但考虑兼容性,鼓励遵循旧的,C++11之前的规范
- C++源文件用 .cxx 扩展名,头文件用 .hxx 扩展名
- 命名要用驼峰风格,不推荐用下划线字符 _
- 局部变量、方法名和函数名必须以小写字母开头,比如 myLocalVariable,myMethod
命名空间、全局变量、类、结构体、模板和枚举名称必须以大写字母开头,并根据其类型添加特定前缀
- 命名空间:以大写字母开头,如 MyNamespace
- 全局变量:以大写字母 G 开头,如 GMyGlobalVariable,不允许使用 g_ 前缀(这是 C 风格)
- 实现类:以大写字母 C 开头,如 CMyClass
- 纯虚基类:以大写字母 I 开头,如 IMyInterface
- 模板类:以大写字母 T 开头,如 TMyTemplate
- typedef 定义的类型名:也以大写字母 T 开头,需要额外的命名标志,避免与模板类混淆,不要用后缀 _t(这是 C 风格)
- 结构体名:以大写字母 S 开头,如 SMyStructure,不要用后缀 _s(这是 C 风格)
- 枚举名:以大写字母 E 开头,如 EMyEnumeration,不使用后缀 _e(这是 C 风格)
Pre-Commit 工具介绍
pre-commit 是个第三方 python 工具,可以用来自动检查 Nuttx 代码风格问题
安装
通常可以直接使用 pip 命令来安装pre-commit工具
pip install pre-commit
安装完成后,进入Nuttx 目录,运行以下命令来设置 pre-commit 钩子
pre-commit install
使用
当尝试提交代码更改时,pre-commit工具会自动运行配置好的一系列检查,所有检查都通过后,提交可以继续进行;如果有失败项,则提交会失败
使用效果如下
如果不想每次提交时才检查,可以用下面命令进行手动检查,比如要检查 drivers/i2c/* 的文件
pre-commit run --files drivers/i2c/*
钩子
下面配置项在配置文件 .pre-commit-config.yaml 须被启用
- end-of-file-fixer:确保文件以一个空行结束
- trailing-whitespace:查找并移除行尾多余的空白字符
- check-added-large-files:防止过大的文件被提交到仓库中
- cmake-format:检查 CMakeLists 文件格式是否符合规范
- nxstyle:检查代码是否符合 Nuttx 编码规范,通过运行 checkpatch.sh 脚本实现
至此,Nuttx 编码规范分析完毕