目的

​ 规范是经验的积累,需要慢慢用心去体会。

规范

1. 原则

  1. 简洁明了,提高代码可读性,读的是代码而不是注释,注释永远都是辅助的。
  2. 零告警,严谨的语法才能保障代码表达和编译器理解的是一至的。

2. 排版

  1. 缩进4空格,杜绝tab键
  2. 程序块之间、变量声明之间,用空行分隔
  3. 突出语法关键字
  4. 一行不要太长,换行增加可读性

3. 注释

  1. 注释的目的是阐明意图目的,而不是翻译某行代码的动作
  2. 注释的原则是尽量代码自注释,代码越清晰,可读性越高
  3. 统一格式 /* 注释内容 */, *号与注释内容之间有一个空格

4. 定义

  1. 命名风格

    1. 模块名+文件名+功能描述,之间采用短下划线分隔
    2. 功能描述部分,采用驼峰风格

    例如,

    VOID OS_TASK_TaskDelay(IN U16 ms);
    
  2. 宏定义

    1. define 必须大写
    2. typedef 可以小写

    例如,

    #define OS_TASK_SWITCH_INTERVAL 10 /* 单位ms */
    typedef U32 StackSize_t;  /* 仅用于堆栈 */
    
  3. 类型定义

    统一使用下面的,编程最关心符号位和位宽

    #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. 变量

  1. 局部变量

    1. 在函数开始是全部定义,不允许在函数中间定义
    2. 命名必须能传达该变量使用的意图
    3. 必须初始化
  2. 全局变量
    1. 在C文件中,函数之前统一定义
    2. 命名必须能传达该变量的使用意图,且以g开头
    3. 本地全局变量必须用static关键字
    4. 开发给外部使用的全局变量,必须在头文件中声明,且使用extern关键字
    5. 必须初始化

6. 函数

  1. 函数名必须能够自注释,必要是需要增加注释写明意图
  2. 参数必须使用IN、OUT、INOUT指明出入参类型
  3. 内部函数必须使用static定义,命名可以不加模块名
  4. 外部函数
    1. 必须在头文件中声明,
    2. 必须使用extern关键字,
    3. 命名时必须带模块名,
    4. 必须给出带注释,并写明函数意图,参数说明,返回值

7. 文件

  1. 头文件

    1. 命名规则模块名+功能,小写,例如os_task.h

    2. 格式如下

      #ifndef __OS_TASK_H__
      #define __OS_TASK_H__..../* 开放的宏定义 */
      ..../* 开放的全局变量声明 */
      ..../* 开放的函数声明 */#endif
      
  2. 源文件

    1. 命名规则模块名+功能,小写,例如os_task.c

    2. 格式如下,举例只为说明源文件中,各元素的顺序

      <- 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. 模块

  1. 模块必须具有封装性,且对外提供尽量少的必要接口,接口必须提供详细的注释描述

  2. 模块的组织形式可以是文件夹形式,也可以是文件形式

    例如:

    .
    ├── 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__编程规范相关推荐

  1. C语言代码示范与讲解+C语言编程规范及基础语法+编程实战

    上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...

  2. Verilog HDL 编程规范

    文章目录 目录 前言 一.文件声明 二.命名 三.注释 四.模块 五.wire.reg 六.表达式 七.条件语句 八.可综合性 九.可重用性 十.同步设计 十一.循环语句 十二.约束 十三.PLL.D ...

  3. android php实战,android编程开发入门实战例子–hello word

    android开发入门实战编程例子–hello word 1.打开Eclipse,选择菜单File->New->Other,打开新建对话框.选择Android Project后,点击Nex ...

  4. 编程规范及程序员的自我修养

    本文重点解决如下问题:什么样的代码是好的代码,什么样的程序员是优秀的程序员? 先看图 4 3(a)中的代码,你能明白这段代码要做什么事情吗?再看图 4 3(b)中的代码,你可以知道这段代码在做什么吗? ...

  5. Windows客户端C/C++编程规范“建议”——前言

    前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份 ...

  6. Python编程规范及性能优化

    为什么80%的码农都做不了架构师?>>>    Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器 ...

  7. 【ES6】ES6编程规范 编程风格

    [ES6]ES6编程规范 编程风格 一.定义变量的规范 二.字符串 三.对象 四.数组 五.函数 查看更多ES6教学文章: 参考文献 引言:这是ES6系列教学的最后一篇.我们讲解一下ES6编程的规范. ...

  8. iOS代码编程规范 根据项目经验汇总

    带出几十位从零开始学iOS的实习生或试用期的开发人员后,觉得真的是千人千面,每个人写的代码都风格迥异,如果没有一个文档规范,每次都和新人进行口头的说教,大概自己是不用敲代码了,所以吃了亏了就开始编写i ...

  9. php团队规范,简单的PHP团队编程规范与习惯

    简单的PHP团队编程规范与习惯 2年前 阅读 3259 评论 0 喜欢 1 ####1.PHP 编程规范与编码习惯最主要的有以下几点: 1.文件说明 2.Function 函数体说明 3.代码缩进 4 ...

  10. python编程标准_python编程规范

    优美的程序不仅仅靠语言约束,更需要良好的编程规范. 缩进:每一级缩进使用4空格 空格: 逗号.冒号.分号.右括号前不准加空格 操作符左右默认加空格,不能为了对齐加空格 换行.行长度: 每行不超过80字 ...

最新文章

  1. kail安装和vmtools安装
  2. hdu 5491 The Next(数学模拟)
  3. .net core实践系列之短信服务-Api的SDK的实现与测试
  4. java 在线编辑器_最好的Markdown开源在线编辑器,没有之一!
  5. python切面异常处理_Spring项目中优雅的异常处理
  6. springboot启动原理_SpringBoot启动原理及相关流程
  7. 团队项目改进与详细设计
  8. hello March
  9. css内容过长显示省略号的几种解决方法
  10. u盘重置后计算机不显示了,u盘在电脑上不显示了如何恢复
  11. django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口
  12. 女朋友说“随便”到底是什么意思?
  13. 《苏菲的世界》——读书笔记
  14. 内蒙古联通云计算机,中国联通西北(呼和浩特)云计算基地
  15. android五子棋设计报告,基于安卓开发的五子棋课程设计报告精选.doc
  16. android如何添加透明图片按钮,如何拥有透明的ImageButton:Android
  17. 怎么把png图片压缩到100k以内,3个工具高效处理
  18. Matlab求一元函数极值
  19. 桌面式FDX-B格式工业级低频RFID标签编码器|读写器CK-TR05-US读写卡操作流程
  20. 语音识别一、语音识别介绍

热门文章

  1. 微信群控,微信云控系统源码之uiautomator框架介绍
  2. 行人重识别论文阅读12-Bi-directional Exponential Angular Triplet Loss for RGB-Infrared Person ReID
  3. 特异度(specificity)与灵敏度(sensitivity)
  4. 手把手教Python使用微信聊天记录生成词云
  5. 【windows下基于Eclipse和GCC搭建stm32开发环境(4)】STM32启动过程详解
  6. 测试内存条是否兼容软件,内存条不兼容有什么表现
  7. sublime出现中文乱码
  8. 跟李沐学AI:A Gentle Introduction to Graph Neural Networks(图神经网络GNN)
  9. 微信公众平台接入广告投放系统
  10. 微信扫码授权登录-王者荣耀