Qt编程规范
一.概述
良好的编程规范可以大幅提高一个程序的可读性、可理解性和可维护性。
本规范参考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编程规范的更多相关文章
- 零基础学QT编程
吴迪.2010.1 北京航空航天大学出版社 Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...
- C++语言编程规范
前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...
- Batsing的网页编程规范(HTML/CSS/JS/PHP)
特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...
- JAVA编程规范(下)
JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1. 通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2. ...
- JAVA 编程规范(上)
2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...
- 使Eclipse符合Java编程规范
编程规范是很重要的东西,能让团队的代码易于阅读和维护,也便于日后的功能扩展. 工欲善其事必先利其器!作为一个Java程序员,与Eclipse打交道可能是一辈子的事情.将Eclipse设置为符合公司编程 ...
- qt编程入门
面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...
- flex+AS3编程规范
flex+AS3编程规范 Flex+AS3编码规范 http://www.cnblogs.com/jiahuafu/ 1. 缩写: 尽量避免使用缩写,使用缩写时尽量和Flex保持一致.但要记住一 ...
- Python编程规范(PEP8)
Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...
随机推荐
- spring boot打包后在tomcat无法访问静态资源问题
我的spring boot项目中前端页面的资源引用 我的静态文件夹是 我的application.yml中资源路径配置了 同时我在WebMvcConfig中配置了addResourceHandlers ...
- 【14.36%】【codeforces 614C】Peter and Snow Blower
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Configure Two DataSources ---
67. Data Access 67.1 Configure a DataSource To override the default settings just define a @Bean of ...
- Android推送服务——百度云推送
一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...
- Android 4.0新增Space及GridLayout初谈
Android 4.0的SDK已经发布,在众多的新增特性中,其中对开发者来说比较重要的特性之一,是新增的两种界面布局方式:Space和Gridlayout,它们跟以往Android版本的sdk有什么不 ...
- js之美
http://fxck.it/post/72326363595 大部分脚本语言里字面量都要快一些,因为解析[]比解析new Array()步骤少的多 关于Object可以用constructor注入的 ...
- vs2008C1902数据库管理程序不匹配
打开一大早vs2008,有这么奇怪的错误, 删了dll正好.图. 版权声明:本文博主原创文章.博客,未经同意不得转载.
- python 整数中1出现的次数
把整数转换为字符串 用count计数 # -*- coding:utf- -*- class Solution: def NumberOf1Between1AndN_Solution(self, n) ...
- 假设做一个循环滚动UIScrollView
先上效果图: 首先初始化: - (void)viewDidLoad { //加入最后一张图 用于循环 int length = 4; NSMutableArray *tempArray = [NSMu ...
- UITextField设置leftView的Insets
Insets就是css中的padding 我们给UITextField设置了leftView,目的是在文本输入框左側显示一个图标.可是在ios7里,这个图标会紧紧地挨着TextField的左边框,非常 ...