嵌入式软件编程规范

时间:2022-03-03 03:39:57

 

一、命名规范

1、命名规范

为了使变量能够更好被阅读代码的其他开发人员理解,需要使用前缀

•a(数组)、b(布尔值)、i(4字节整型)、u(无符号整型数)、p(指针)、s(字符串)、sz(以NULL结尾的字符串)

  --比如:

  bool    bFlag;    

  int     iCount;     

  char    szName[NAME_LEN];

•i,j,k,m,n,x,y,z 单字母变量可是使用在循环控制和索引处,不可滥用
•局部静态变量在符合其他规则的基础上,必须加前缀s_,如s_bFlag。
•全局变量在符合其他规则的基础上,必须加前缀g_,如:g_bFlag
•如果一个变量既是全局变量又是静态变量,则使用g_即可,因为相对于静态类型,全局类型更需要突出
•如果是一个结构体变量,可以使用stru_或者st_,视情况而定,不能使代码看起来太长,反而不容易阅读
 

2、函数命名

  • 函数名由小写字母+下划线组成,在区别不同版本时可使用数字。
  • 多个单词使用下划线分割。
  • 函数名需加固定前缀,前缀形式:模块_,如:日志模块  log_write_alarm_entry()。
  • 函数名必须有明确意思,功能相反的函数使用反义词区别。

--如:cfg_param_net_set();  cfg_param_net_get()。

    usr_account_add();    usr_account_del()。

  • 接口的多个版本命名可使用数字标识,以此区别不同版本,形式 _v1。

--如:cfg_param_net_set() 旧;cfg_param_net_set_v1();  cfg_param_net_set_v2()

 

3、结构体命名

  • 1. 结构体名由大写字母、数字和下划线组成,不允许使用小写字母。
  • 2.多个单词使用下划线分割。
  • 3. 结构体名必须加固定前缀:模块_,固定后缀: _T。
  •   [示例]:参数管理模块,pppoe参数     typedef struct {} CFG_PPPOE_PARAM_T, * PCFG_PPPOE_PARAM_T

 

4、宏命名

  • 1.宏名由大写字母、数字和下划线组成,不允许使用小写字母。
  • 2.多个单词使用下划线分割。
  • 3.宏名必须加固定前缀,前缀形式:模块_。

--[示例]:参数管理模块,用户名长度 #define  CFG_NAME_LEN  (32)

 

二、宏的使用

  • 目前在代码中,宏主要有两种作用,首先是定义一个数值,另外就是条件宏,用来控制编译器进行有选择的代码编译
  • 数值宏在嵌套定义时,要加括号
    • #define SIZE (10*4)
    • #define NUM (1024/SIZE)

上例中若SIZE 定义时不加括号,那么NUM 就替换成了1024/ 10*4,将导致NUM值出乎预料

  • 使用条件宏的过程中,若必须使用,则应避免过多的宏影响阅读

 

三、注释风格

1、错误修复和解决方法代码必须使用注释。

修改代码时,总是使代码的注释保持最新, 为了防止问题反复出现,对错误修复和解决方法代码必须使用注释。

2、在每个函数的开始,应该提供标准的注释。

        以指示例程的用途,注释样本应该是解释它为什么存在和可以做什么的简短介绍。

3、在变量声明时,应在行尾添加注释;全局变量必须有注释。

在这种情况下,将所有行尾注释应使用公共制表符(Tab)在一处对齐。

4、对由循环和逻辑分支组成的代码使用注释。

这些可以帮助源代码读者理解代码书写目的。

5、为了使层次清晰,在闭合的右花括号后注释该闭合所对应的起点。