一.概述

良好的编程规范可以大幅提高一个程序的可读性、可理解性和可维护性。

本规范参考Effective C++中文版、Google C++编码规范及Qt编码风格。

二.头文件

1)      #define保护

所有头文件都应该使用#define防止头文件被多重包含,命名格式为:<ProjectName>_<FileName>_H,例如:

#ifndef MAP_MAINWINDOW_H

#define MAP_MAINWINDOW_H

……

#endif //MAP_MAINWINDOW_H

2)      头文件依赖

使用前声明,尽量减少.h文件中#include的数量。

3)      头文件包含次序

将包含次序标准化可增强可读性,次序如下:C库头文件、C++库头文件、其他库的头文件、项目内的头文件。

三.命名约定

1)      通用命名约定

避免使用缩写。

2)      文件命名

文件名全部小写,可以包含下划线,例如:

my_test_class.h

my_test_class.cpp

mytestclass.h

mytestclass.cpp

3)      类命名

类名是名词,每个单词以大写字母开头,不包含下划线,且名前加大写字母C,例如:

CMySystemWatcher

CClockBattery

4)      变量命名

变量名是名词,首单词以小写字母开头,后续单词以大写字母开头。每行一个变量,单字符的变量只在临时变量或循环计数中使用。

类成员变量需在变量名前加m_前缀,例如:

int m_myValue;

局部变量等到需要使用时再定义变量,且定义时必须初始化,整数用0,实数用0.0,指针用NULL,字符(串)用'\0'。例如:

int myValue=0;

尽量不要使用全局变量,以降低耦合。若使用能带来极大便利,命名时需在变量前加g_前缀,例如:

int g_myValue;

5)      常量命名

常量不含前缀且应该大写,单词间有下划线,包括全局常量和宏定义,例如:

const int MY_VALUE=0;

#define MY_VALUE 0

6)      函数命名

函数名是动词或含有动词的短语,首单词以小写字母开头,后续单词以大写字母开头,例如:

int getMyValue();

int setMyeValue(int value)

函数参数所有字母小写,单词间有下划线,若为非基本数据类型,使用const引用,例如:

setColor(const QColor & new_color)

7)      枚举命名

枚举名和枚举值都是名词,每个单词以大写字母开头,且第一个单词是Enum,例如:

enum EnumMyColor //枚举名

{

EnumWhite,     //枚举值

EnumBlack

};

8)      命名空间

命名空间的名称是名词,每个单词以大写字母开头,且前两个单词是BaiDi,例如:

namespace BaoDiProject{ }

9)      结构体命名

结构体中只定义变量,不定义函数。

结构体名是名词,每个单词以大写字母开头。

结构体成员名词,首单词以小写字母开头,后续单词以大写字母开头。例如:

struct MyColor

{

boolisMyColor;

int white;

};

四.代码注释

1)      注释风格

使用//或/**/,统一就行。一般情况下,源程序有效注释量必须在20%以上,不易理解的地方都需加上注释,注释不宜太多也不能太少。

2)      类注释

类的头文件顶部需添加说明性注释,包括版权说明、版本号、作者、生成日期、类的功能描述等。

/*****************************************************

**Copyright(C), 2015-2025, Baodi Technology.

**Version:

**Author:

**Date:

**Description://类用途描述

*****************************************************/

3)      函数注释

重要函数头部应该进行注释,包括函数名、函数功能描述、输入参数、输出参数、返回值及其他。

/*************************************************

**Function:        // 函数名称

**Description:    // 函数功能描述

**Input:          // 输入参数说明,包括每个参数的作用、取值说明

**Output:         // 对输出参数的说明

**Return:         // 函数返回值的说明

**Others:         // 其它说明

*************************************************/

4)      变量注释

通常变量名本身足以说明变量用途,特定情况下,需要额外注释说明。变量注释位于变量上方,例如:

//keepstrack of the total number of entries in the table

int  totalNumber;

5)      实现注释

对于实现代码中巧妙的、晦涩的、重要的地方加以注释。

出彩或复杂的代码块上方要加以注释,例如:

// Divide result by two, taking into account that x

// contains the carry from the add.

for(int i=0;i<100;i++)

{

x=(x<<8)+(*result)[i];

(*result)=x>>1;

x&=1;

}

比较晦涩的地方可在行尾,代码之后空两格加注释,例如:

if(……)

{

……

return;  //return while meetingthe conditions

}

6)      TODO注释

计划中但未完成的代码使用TODO注释,例如:

void CMyClass::function()

{

//TODO

}

五.代码排版

1)       行长度

较长的语句(>80字符)要分成多行书写,长表达式要在较低优先级操作符处划分新行,操作符放在新行之首,逗号放在一行的结束,划分出的新行要进行适当的缩进,使排版整齐,语句可读,例如:

if ((taskOne < taskNumber)&&(taskTwo < taskNumber)

&&(taskThree< taskNumber))

{

……

}

2)      缩进

使用4个空格进行代码缩进,不要用Tab键。但是对于由开发工具自动生成的代码可以有不一致。

预处理指令不要缩进,从顶格开始,例如:

if(isActive())

{

#if DISASTER_PENDING

dropEverything();

#endif

backToNormal();

}

3)      空行

空行可将语句进行适当的分组,便于阅读,在相对独立的代码块之间必须加一行空行。

4)      大括号

大括号永远单独占一行,不跟在语句后面。如果控制语句(if、while、for、switch)体为空或者只有一行,也要使用大括号,例如:

if ( address.isEmpty( ) )

{

return false;

}

switch(value)

{

case 0:

{

get Electricity();

break;

}

default:

{

break;

}

}

5)      圆括号

使用圆括号将表达式分组,即使运算符的优先级相同,也要用圆括号进行分组,例如:

if ( ( a && b) | | c)

六.重要原则

正确性>稳定性>可测试性>可读性>全局效率>局部效率>个人习惯

a)      正确性,指程序要实现设计要求的功能;

b)     稳定性、安全性,指程序稳定、可靠、安全;

c)      可测试性,指程序要具有良好的可测试性;

d)     规范/可读性,指程序书写风格、命名规则等要符合规范;

e)      全局效率,指软件系统的整体效率;

f)       局部效率,指某个模块/子模块/函数的本身效率;

g)      个人表达方式/个人方便性,指个人编程习惯。

http://blog.csdn.net/caoshangpa/article/details/61635525

Qt编程规范的更多相关文章

  1. 零基础学QT编程

    吴迪.2010.1 北京航空航天大学出版社   Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...

  2. C++语言编程规范

    前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...

  3. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  4. JAVA编程规范(下)

    JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1.     通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2.     ...

  5. JAVA 编程规范(上)

    2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1.      应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...

  6. 使Eclipse符合Java编程规范

    编程规范是很重要的东西,能让团队的代码易于阅读和维护,也便于日后的功能扩展. 工欲善其事必先利其器!作为一个Java程序员,与Eclipse打交道可能是一辈子的事情.将Eclipse设置为符合公司编程 ...

  7. qt编程入门

    面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...

  8. flex+AS3编程规范

    flex+AS3编程规范 Flex+AS3编码规范 http://www.cnblogs.com/jiahuafu/   1.  缩写: 尽量避免使用缩写,使用缩写时尽量和Flex保持一致.但要记住一 ...

  9. Python编程规范(PEP8)

    Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...

随机推荐

  1. 【codeforces 534B】Covered Path

    [题目链接]:http://codeforces.com/contest/534/problem/B [题意] 你在t秒内可以将车的速度任意增加减少绝对值不超过d; 然后要求在一开始车速为v1,t秒之 ...

  2. WPF 禁用实时触摸

    原文:WPF 禁用实时触摸 微软想把 WPF 作为 win7 的触摸好用的框架,所以微软做了很多特殊的兼容.为了获得真实的触摸消息,微软提供了 OnStylusDown, OnStylusUp, 和 ...

  3. webpack单独构建scss文件与.vue组件里构建scss的一个坑

    在入口main.js里构建scss是通过引入模块的方式 import './assets/_reset.scss'; import './assets/_flex.scss'; import './a ...

  4. memcache redis mogodb 分别适用在什么样的场景?

    memcache 与 redis 都是key-value存储系统,相对来说redis可能比memcache适应场景多些,存储的value类型也更多些,而redis也支持主从同步.而mongo是一种文档 ...

  5. Hadoop和RDBMS的混合系统介绍

    现在大数据概念被时常提起,社会各界对其关注度越来越高.往往越是火热的东西,人们越容易忽略它的本质.在 slides 中,我首先按照自己的理解,简单的理顺数据处理领域的发展历程.之后,落脚点是两个比较有 ...

  6. bootstrap学习之路

    接触bootstrap也半年有余,从一开始不知道如何使用,到知道其各个模块的具体功能,再到提炼哪些使用的比较多,再此又体会到bootstrap源码的精髓,通过oocss写的类使其感觉更有易用性,开始本 ...

  7. 动态加载Dll时,通过Type生成类对象

    原文:动态加载Dll时,通过Type生成类对象 转:http://www.cnblogs.com/zfanlong1314/p/4197383.html "反射"其实就是利用程序集 ...

  8. device platform 相应的表

    hw.machine 这个值相应相关代码最好在后台管理,降低手机端代码更新次数 if ([platform isEqualToString:@"iPhone1,1"]) retur ...

  9. Lizcst Software Lab新秀品牌上线!

    科友微电机是Lizcst Software Lab旗下品牌新秀,专业经营各种微型特种直流电机.微型发电机.微型电机配件.航模车模船模素材.教学科学小制作材料的网店.本店秉承Lizcst Softwar ...

  10. 经典c开源项目

    1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...