序言:

 编程规范可以提升代码可读性,提高可维护性。

目录:

一、命名规范

二、内存管理规范

三、函数方法规范

四、控制语句规范  

五、注释规范

六、排版规范

七、版本管理规范

八、界面编程

词义解释:强制,推荐,参考分别表示规范的三个等级。

一、命名规范:

【强制】1.类、函数、变量及参数采用[谷歌式命名约定](https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/naming)。

【强制】2.常量(包含对话框ID)命名所有字母大写。

【强制】3.接口类在前+字符(纯虚类)I。基类则在前+Base。

【强制】4.函数命名规范:获取,查询用Get,设置用Set,增加用Add,插入用Insert,删除用Delete。保存用Save。

【强制】5.槽函数的命名:每个函数前缀是slot_,如:slot_SendData();

【强制】6.信号的命名:每个函数前缀是sig_,如:sig_SendData();

【强制】7.如果是全局变量,请在前面加上this->以示区分。

二、内存管理规范

【强制】1.内存谁申请,谁释放

【强制】2.不允许使用CPP自带智能指针shared_ptr,share_ptr和qobject搭配使用会出现一些意料之外的问题。

【强制】3.使用指针请一定要使用Qt自带的智能指针QPointer和QSharedPointer,不允许出现裸露在外的普通指针。

【强制】4.new申请内存之后。使用try catch捕获申请内存是否成功。原因:new申请内存可能失败

【强制】5.变量(普通变量和指针)必须初始化。

【强制】6.使用指针前必须检查指针是否为空。

【强制】7.指针new后必须delete且将指针赋值为nullptr。

【强制】8.函数中分配的内存,函数退出之前要释放。

【强制】9.多线程读写共用变量要加锁。

【推荐】10.对可能的跨线程信号槽函数需要在connect函数中加入Qt::QueuedConnection参数

【强制】11.程序内部的所有数据流动,除了自定义的类型,系统类型比如String,int等全部使用Qt内部类型QString,qint32等。

【推荐】12.在编写类的时候最好保留调用方参数,以方便使用Qt自带GC

三、函数方法规范

   【强制】1.函数参数必须在使用前校验(建议放在函数第一行)。包括数据范围校验,数据越界校验,异常指针校验。

   【推荐】2.增加函数错误处理流程,try catch,asset

   【参考】3.函数参数比较多时,应考虑用结构体代替

   【推荐】4.函数体长度应在80行内,且保证函数功能的单一性。

   【推荐】5.函数内代码层次应保持一致。

四、控制语句

 【强制】1.尽量上的使用if else 语句,多采用卫语句。

 【强制】2.不要在条件推断中运行其他复杂的语句。将复 杂逻辑推断的结果赋值给一个有意义的布尔变量名。以提高可读性。

五、注释规范

 【强制】1.模块注释包含信息:作者,日期,功能,依赖模块,调用流程

 【强制】2.类注释包含信息:作者,日期,功能,依赖类,调用流程

 【强制】3.函数注释包含信息:作者,日期,功能,参数含义,返回值,其他。

 【强制】4.变量注释:注解内容要清楚准确不能有歧义。

六、排版规范

 【推荐】1.左大括号前不换行,左大括号后换行;右大括号前换行,右大括号后还有 else 等代码则不换行;表示终止右大括号后必须换行。

【推荐】 2.左括号和后一个字符之间不出现空格。相同,右括号和前一个字符之间也不出现空格。

 【推荐】 3.if/for/while/switch/do 等保留字与左右括号之间都必须加空格

 【推荐】4.不论什么运算符左右必须加一个空格。

 【强制】 5.单行字符数限制不超过 120 个,超出须要换行,换行时遵循例如以下原则:

    运算符与下文一起换行,方法调用的点符号与下文一起换行,在括号前不要换行。

  【强制】6.使用空格进行对齐,禁止使用tab对齐。

七、版本管理规范

 1.VXX.XX.XX.XXXXXX.XXXXXX使用四位数进行版本管理,1-2位为主版本号,3-4位为分支版本号,5-6为次版本号,7-10为修订号1,11-15。

   【强制】主版本号:从1开始,产品更新换代时+1。之后版本号清零。

   【强制】分支版本号:从0开始,新建分支时+1,之后版本号清零。

   【强制】次版本号:从0开始,新增功能时+1,之后版本号清零

   【推荐】修订号1:年月日

   【推荐】修订号2: 小时分