编程规范
编程规范
规范
1. 原则
- 简洁明了,提高代码可读性,读的是代码而不是注释,注释永远都是辅助的。
- 零告警,严谨的语法才能保障代码表达和编译器理解的是一至的。
2. 排版
- 程序块之间、变量声明之间,用空行分隔
- 突出语法关键字
- 一行不要太长,换行增加可读性
- Tab键排版
3. 注释
注释的目的是阐明意图目的,而不是翻译某行代码的动作
注释的原则是尽量代码自注释,代码越清晰,可读性越高
统一格式 **/* 注释内容 */**, *号与注释内容之间有一个空格
1
2
3
4
5
6
7
8
9
10
11/*************************************************
Copyright //版权
File name: // 文件名
Author: //作者
Version: //版本号
Description: // 用于详细说明此程序文件完成的主要功能,与其他模块
// 或函数的接口,输出值、取值范围、含义及参数间的控
// 制、顺序、独立或依赖等关系
Others: // 其它内容的说明
Log: // 修改日志,包括修改内容,日期,修改人等
*************************************************/1
2
3
4
5
6/*
*@ Description: 函数描述,描述本函数的基本功能
* @param 1 – 参数 1.
* @param 2 – 参数 2
* @return – 返回值
*/
4. 定义
命名风格
- 模块名+文件名+功能描述,之间采用短下划线分隔
- 功能描述部分,采用驼峰风格
例如,
1
void SAFE_LASER_setLaserShield(uint8_t _EN);
宏定义
- define 必须大写
- typedef 可以小写
例如,
1
2
typedef uint32_t StackSize_t; /* 仅用于堆栈 */类型定义
使用linux自带类型定义规则
1
2
3
4
5
6
7
8
9
10
11
12
5. 变量
- 变量通用规则
- 采用驼峰风格,首字母大写
- 在函数开始是全部定义,不允许在函数中间定义
- 变量命名必须可以表示其含义
- 必须初始化
- 局部变量
- 本地局部变量必须用static关键字修饰
- 全局变量
- 全局变量必须以g开头
- 函数变量
- 变量必须以_开头
1 | static uint8_t SafeLaserSet = 0; |
6. 函数
- 函数名必须能够自注释,必要是需要增加注释写明意图
- 内部函数必须使用static定义,命名可以不加模块名
- 外部函数
- 必须在头文件中声明,
- 命名时必须带模块名,
- 必须给出带注释,并写明函数意图,参数说明,返回值
1 | static uint_t SAFE_LASER_setLaseShield(uint8_t _EN); |
7. 文件
头文件
命名规则模块名+功能,小写,例如os_task.h
格式如下
1
2
3
4
5
6
7
8
..../* 开放的宏定义 */
..../* 开放的全局变量声明 */
..../* 开放的函数声明 */
源文件
命名规则模块名+功能,小写,例如os_task.c
格式如下,举例只为说明源文件中,各元素的顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<- 1 - 引用头文件 ->
<- 2 - 定义本文件用到的宏 ->
typedef uint32_t StackSize_t ; /* 仅用于堆栈 */
typedef enum{};
typedef union{};
typedef struct{};
<- 3 - 本地变量 ->
static StackSize_t *TopStack = NULL;
<- 4 - 开放的全局变量 ->
uint32_t gOsTaskEventBitMap = 0;
<- 5 - 本地函数,仅在本文件使用 ->
static void TASK_TaskSwitch(void)
{
return;
}
<- 6 - 开放的函数 ->
void OS_TASK_TaskDelay(uint16_t _ms)
{
return;
}
8.约定俗成简写
1 | addition add 加 |
有互斥意义的变量或者动作相反的函数应该是用互斥词组命名
1 | add/remove begin/end create/destroy insert/delete |
9. 模块
模块必须具有封装性,且对外提供尽量少的必要接口,接口必须提供详细的注释描述
模块的组织形式可以是文件夹形式,也可以是文件形式
文件都以小写命名
例如:
1
2
3
4
5
6
7
8
9
10
11
12.
├── src /* 应用层代码 */
│ ├── main.c /* 应用入口 */
│ ├── test.c
│ ├── test1.c
├── include /* 设备驱动代码 */
│ ├── test.h
│ ├── test1.h
├── debug /* 芯片厂家提供的库代码 */
│ ├── MakeFile
│ ├── CMake
│ └── main
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 某飞行员的随笔!