lfwh1517通过本文主要向大家介绍了代码编程风格与规范等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
变量声明
- 声明每一个变量都要用独立的一行
- 避免短的或无意义的命名
- 单个字符的变量名只适用于用来计数的临时变量,因为此时该变量的用途十分明显
- 当一个变量被用到时再声明它
// Wrong
int a, b;
char *c, *d;
// Correct
int height;
int width;
char *nameOfThis;
char *nameOfThat;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
变量一般命名法
- 变量名和函数名以小写字母开头,开头之后的部分每个单词以大写字母开头
- 避免使用缩写
// Wrong
short Cntr;
char ITEM_DELIM = ' ';
// Correct
short counter;
char itemDelimiter = ' ';
- 1
- 2
- 3
- 4
- 5
- 6
- 7
变量在Qt中的命名
- 类名以大写字母开头,公开类以Q开头,紧跟大写字母;公用函数以q开头。(此为Qt内部规范,我们可不遵守)
- 首字母缩写词出现在命名中,采用驼峰命名法,如QXmlStreamReader,而不是QXMLStreamReader(即只有第一个字母大写)
空白行与空格的使用
- 用空行在适当的地方划分代码块
- 总是只用一个空行
- 在关键词和花括号之间总是只用一个空格符
// Wrong
if(foo){
}
// Correct
if (foo) {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
指针的书写规范
- 对于指针或引用,在类型名和或&之间用一个空格,但是在或&和变量名之间没有空格
char *x;
const QString &myString;
const char * const y = "hello";
- 1
- 2
- 3
二元操作符
- 二元操作符的左右都要有空格
- 二元操作符对待它的两个参数是同样对待的,只是在该操作符是类外的操作符
- 例如QLineF有它自己的==操作符
QLineF lineF;
QLine lineN;
if (lineF == lineN) // Ok, lineN is implicitly converted to QLineF
if (lineN == lineF) // Error: QLineF cannot be converted implicitly to QLine, and the LHS is a member so no conversion applies
- 1
- 2
- 3
- 4
- 5
逗号
- 逗号左边没有空格,逗号右边有一个空格
#include <QApplication>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QT_REQUIRE_VERSION(argc, argv, "4.0.2")
QApplication app(argc, argv);
...
return app.exec();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
分号
- 分号左边没有空格,分号作为语句的结束符,其右边一般不再有内容
struct Point2D
{
int x;
int y;
};
- 1
- 2
- 3
- 4
- 5
井号
- #号右边没有空格
#include <QtGlobal>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include <QtWidgets>
#else
#include <QtGui>
#endif
- 1
- 2
- 3
- 4
- 5
- 6
- 7
引号
- 左引号的左边和右引号的右边都有一个空格,左引号的右边和右引号的左边都没有空格
- 如果右引号右边是又括号的话,它们之间没有空格
qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2;
QT_REQUIRE_VERSION(argc, argv, "4.0.2")
- 1
- 2
- 3
cast
- cast后无须空格
// Wrong
char* blockOfMemory = (char* ) malloc(data.size());
// Correct
char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
- 1
- 2
- 3
- 4
- 5
- 避免C语言的casts,尽量用C++的casts (static_cast, const_cast, reinterpret_cast)。 reinterpret_cast 和 C风格的cast用起来都是危险的,但至少 reinterpret_cast 不会把const修饰符去掉。
- 涉及到QObjects或重构自己的代码时,不要使用dynamic_cast,而是用qobject_cast,例如在引进一个类型的方法时。
- 用构造函数去cast简单类型,例如:用int(myFloat)代替(int)myFloat
语句
- 不要在一行写多条语句
- 另起一行写控制流语句的定义
// Wrong
if (foo) bar();
// Correct
if (foo)
bar();
- 1
- 2
- 3
- 4
- 5
- 6
花括号写法
- 使用紧贴括号:左括号和语句的开头在同一行,如果右括号是紧跟在一个关键词之后的,则右括号和该关键词在同一行
// Wrong
if (codec)
{
}
else
{
}
// Correct
if (codec) {
} else {
}<

