GD32实战1__编程规范
目的
规范是经验的积累,需要慢慢用心去体会。
规范
1. 原则
- 简洁明了,提高代码可读性,读的是代码而不是注释,注释永远都是辅助的。
- 零告警,严谨的语法才能保障代码表达和编译器理解的是一至的。
2. 排版
- 缩进4空格,杜绝tab键
- 程序块之间、变量声明之间,用空行分隔
- 突出语法关键字
- 一行不要太长,换行增加可读性
3. 注释
- 注释的目的是阐明意图目的,而不是翻译某行代码的动作
- 注释的原则是尽量代码自注释,代码越清晰,可读性越高
- 统一格式 /* 注释内容 */, *号与注释内容之间有一个空格
4. 定义
命名风格
- 模块名+文件名+功能描述,之间采用短下划线分隔
- 功能描述部分,采用驼峰风格
例如,
VOID OS_TASK_TaskDelay(IN U16 ms);
宏定义
- define 必须大写
- typedef 可以小写
例如,
#define OS_TASK_SWITCH_INTERVAL 10 /* 单位ms */ typedef U32 StackSize_t; /* 仅用于堆栈 */
类型定义
统一使用下面的,编程最关心符号位和位宽
#define U8 unsigned char #define S8 char #define U16 unsigned short #define S16 short #define U32 unsigned int #define S32 int #define U64 unsigned long long #define S64 long long #define VOID void #define BOOL unsigned char#define TRUE 1 #define FALSE 0 #define NULL 0
5. 变量
- 局部变量
- 在函数开始是全部定义,不允许在函数中间定义
- 命名必须能传达该变量使用的意图
- 必须初始化
- 全局变量
- 在C文件中,函数之前统一定义
- 命名必须能传达该变量的使用意图,且以g开头
- 本地全局变量必须用static关键字
- 开发给外部使用的全局变量,必须在头文件中声明,且使用extern关键字
- 必须初始化
6. 函数
- 函数名必须能够自注释,必要是需要增加注释写明意图
- 参数必须使用IN、OUT、INOUT指明出入参类型
- 内部函数必须使用static定义,命名可以不加模块名
- 外部函数
- 必须在头文件中声明,
- 必须使用extern关键字,
- 命名时必须带模块名,
- 必须给出带注释,并写明函数意图,参数说明,返回值
7. 文件
头文件
命名规则模块名+功能,小写,例如os_task.h
格式如下
#ifndef __OS_TASK_H__ #define __OS_TASK_H__..../* 开放的宏定义 */ ..../* 开放的全局变量声明 */ ..../* 开放的函数声明 */#endif
源文件
命名规则模块名+功能,小写,例如os_task.c
格式如下,举例只为说明源文件中,各元素的顺序
<- 1 - 引用头文件 -> #include "os_task.h"<- 2 - 定义本文件用到的宏 -> #define OS_TASK_SWITCH_INTERVAL 10 /* 单位ms */ typedef U32 StackSize_t ; /* 仅用于堆栈 */ typedef enum{}; typedef struct{};<- 3 - 静态全局变量 -> static StackSize_t *gTopStack = NULL;<- 4 - 本模块开放的全局变量 -> U32 gOsTaskEventBitMap = 0; <- 5 - 本地函数,仅在本文件使用 -> static VOID TASK_TaskSwitch(VOID) {return; }<- 6 - 本模块开放的函数 -> VOID OS_TASK_TaskDelay(IN U16 ms) {return; }
8. 模块
模块必须具有封装性,且对外提供尽量少的必要接口,接口必须提供详细的注释描述
模块的组织形式可以是文件夹形式,也可以是文件形式
例如:
. ├── app /* 应用层代码 */ │ ├── app.h │ ├── main.c /* 应用入口 */ │ ├── test.c │ └── test.h ├── driver /* 设备驱动代码 */ │ ├── drv_led.c │ ├── drv_led.h │ ├── drv_uart.c │ └── drv_uart.h ├── os /* 操作系统代码 */ │ ├── os_task.c │ ├── os_task.h │ └── os_type.h ├── sdk /* 芯片厂家提供的库代码 */ │ ├── CMSIS │ └── Peripherals
GD32实战1__编程规范相关推荐
- C语言代码示范与讲解+C语言编程规范及基础语法+编程实战
上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...
- Verilog HDL 编程规范
文章目录 目录 前言 一.文件声明 二.命名 三.注释 四.模块 五.wire.reg 六.表达式 七.条件语句 八.可综合性 九.可重用性 十.同步设计 十一.循环语句 十二.约束 十三.PLL.D ...
- android php实战,android编程开发入门实战例子–hello word
android开发入门实战编程例子–hello word 1.打开Eclipse,选择菜单File->New->Other,打开新建对话框.选择Android Project后,点击Nex ...
- 编程规范及程序员的自我修养
本文重点解决如下问题:什么样的代码是好的代码,什么样的程序员是优秀的程序员? 先看图 4 3(a)中的代码,你能明白这段代码要做什么事情吗?再看图 4 3(b)中的代码,你可以知道这段代码在做什么吗? ...
- Windows客户端C/C++编程规范“建议”——前言
前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份 ...
- Python编程规范及性能优化
为什么80%的码农都做不了架构师?>>> Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器 ...
- 【ES6】ES6编程规范 编程风格
[ES6]ES6编程规范 编程风格 一.定义变量的规范 二.字符串 三.对象 四.数组 五.函数 查看更多ES6教学文章: 参考文献 引言:这是ES6系列教学的最后一篇.我们讲解一下ES6编程的规范. ...
- iOS代码编程规范 根据项目经验汇总
带出几十位从零开始学iOS的实习生或试用期的开发人员后,觉得真的是千人千面,每个人写的代码都风格迥异,如果没有一个文档规范,每次都和新人进行口头的说教,大概自己是不用敲代码了,所以吃了亏了就开始编写i ...
- php团队规范,简单的PHP团队编程规范与习惯
简单的PHP团队编程规范与习惯 2年前 阅读 3259 评论 0 喜欢 1 ####1.PHP 编程规范与编码习惯最主要的有以下几点: 1.文件说明 2.Function 函数体说明 3.代码缩进 4 ...
- python编程标准_python编程规范
优美的程序不仅仅靠语言约束,更需要良好的编程规范. 缩进:每一级缩进使用4空格 空格: 逗号.冒号.分号.右括号前不准加空格 操作符左右默认加空格,不能为了对齐加空格 换行.行长度: 每行不超过80字 ...
最新文章
- kail安装和vmtools安装
- hdu 5491 The Next(数学模拟)
- .net core实践系列之短信服务-Api的SDK的实现与测试
- java 在线编辑器_最好的Markdown开源在线编辑器,没有之一!
- python切面异常处理_Spring项目中优雅的异常处理
- springboot启动原理_SpringBoot启动原理及相关流程
- 团队项目改进与详细设计
- hello March
- css内容过长显示省略号的几种解决方法
- u盘重置后计算机不显示了,u盘在电脑上不显示了如何恢复
- django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口
- 女朋友说“随便”到底是什么意思?
- 《苏菲的世界》——读书笔记
- 内蒙古联通云计算机,中国联通西北(呼和浩特)云计算基地
- android五子棋设计报告,基于安卓开发的五子棋课程设计报告精选.doc
- android如何添加透明图片按钮,如何拥有透明的ImageButton:Android
- 怎么把png图片压缩到100k以内,3个工具高效处理
- Matlab求一元函数极值
- 桌面式FDX-B格式工业级低频RFID标签编码器|读写器CK-TR05-US读写卡操作流程
- 语音识别一、语音识别介绍
热门文章
- 微信群控,微信云控系统源码之uiautomator框架介绍
- 行人重识别论文阅读12-Bi-directional Exponential Angular Triplet Loss for RGB-Infrared Person ReID
- 特异度(specificity)与灵敏度(sensitivity)
- 手把手教Python使用微信聊天记录生成词云
- 【windows下基于Eclipse和GCC搭建stm32开发环境(4)】STM32启动过程详解
- 测试内存条是否兼容软件,内存条不兼容有什么表现
- sublime出现中文乱码
- 跟李沐学AI:A Gentle Introduction to Graph Neural Networks(图神经网络GNN)
- 微信公众平台接入广告投放系统
- 微信扫码授权登录-王者荣耀