缩进
- 用4个空格进行缩进
- 是空格,不是tab
声明变量
- 在单独的一行声明每一个变量
- 避免过短或者无意义的变量名(例如:“a”, “rbarr”, “nughdeget”)
- 单个字符只能用在诸如计数器或者临时变量等作用明显的场合
- 只有当确定需要这个变量的时候,我们才去声明它
// Wrong
int a, b;
char *c, *d;
// Correct
int height;
int width;
char *nameOfThis;
char *nameOfThat;
- 变量名或者函数名以小写字母开始,变量名后面的每一个连续的单词要用大写字母开始
- 避免缩写
// Wrong
short Cntr;
char ITEM_DELIM = ' ';
// Correct
short counter;
char itemDelimiter = ' ';
- 类总是以大写字母开始。公共类以字母’Q’跟上一个大写字母开始。公共函数大多以字母’q’开始。
- 首字母缩略词是驼峰式的(e.g. QXmlStreamReader, not QXMLStreamReader)
空格
- 使用空行将语句组合在一起
- 始终只使用一个空白行
- 始终在关键字之后和花括号前使用一个空格
// Wrong
if(foo){
}
// Correct
if (foo) {
}
- 对于引用或者是指针而言,总是要使用一个空格在类型和’*‘或’&‘之间,在变量和’*‘或’&'之间不能有空格
char *x;
const QString &myString;
const char * const y = "hello";
- 二进制运算符之间要有空格
- 在每一个逗号之后要留一个空格
- 类型转换之后不能加空格
- 避免C风格的类型转换
// Wrong
char* blockOfMemory = (char* ) malloc(data.size());
// Correct
char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
- 不要在一行放置多条语句
- 通过扩展,对控制流语句的主体使用新行
// Wrong
if (foo) bar();
// Correct
if (foo)
bar();
花括号
- 使用大括号:开括号与语句开头在同一行。如果右括号后面紧跟着另一个关键字,则它也会进入同一行:
// Wrong
if (codec)
{
}
else
{
}
// Correct
if (codec) {
} else {
}
- 例外:函数实现(但不包括lambdas)和类声明始终在行首处使用左括号:
static void foo(int g)
{
qDebug("foo: %i", g);
}
class Moo
{
};
- 仅当条件语句的主体包含多行时才使用花括号
// Wrong
if (address.isEmpty()) {
return false;
}
for (int i = 0; i < 10; ++i) {
qDebug("%i", i);
}
// Correct
if (address.isEmpty())
return false;
for (int i = 0; i < 10; ++i)
qDebug("%i", i);
- 例外1:如果父语句涵盖多行/换行,也请使用花括号
// Correct
if (address.isEmpty() || !isValid()
|| !codec) {
return false;
}
- 例外2:花括号对称:在if-then-else块中,如果if代码或else代码覆盖几行,也要使用花括号
// Wrong
if (address.isEmpty())
qDebug("empty!");
else {
qDebug("%s", qPrintable(address));
it;
}
// Correct
if (address.isEmpty()) {
qDebug("empty!");
} else {
qDebug("%s", qPrintable(address));
it;
}
// Wrong
if (a)
…
else
if (b)
…
// Correct
if (a) {
…
} else {
if (b)
…
}
- 条件语句的主体为空时使用花括号
// Wrong
while (a);
// Correct
while (a) {}
括号
- 使用括号将表达式分组
// Wrong
if (a && b || c)
// Correct
if ((a && b) || c)
// Wrong
a + b & c
// Correct
(a + b) & c
分支语句
- case标签与switch关键字在同一列
- 每个case的末尾都必须有一个break(或return)语句,或者使用Q_FALLTHROUGH()表示故意没有中断,除非立即发生另一case。
switch (myEnum) {
case Value1:
doSomething();
break;
case Value2:
case Value3:
doSomethingElse();
Q_FALLTHROUGH();
default:
defaultHandling();
break;
}
跳转语句 (break, continue, return, and goto)
- 不要把else放在跳转语句之后
// Wrong
if (thisOrThat)
return;
else
somethingElse();
// Correct
if (thisOrThat)
return;
somethingElse();
- 例外:如果代码本质上是对称的,则允许使用“ else”来可视化该对称性
换行
-
保持少于100个字符的行;必要时包裹
- 注释应当小于80列,调整布局避免出现“锯齿状”段落,尽量使文本流畅。
-
逗号放在换行符的末尾;运算符从新行的开头开始。如果编辑器太窄,则很容易错过该行末尾的运算符。
// Wrong if (longExpression + otherLongExpression + otherOtherLongExpression) { } // Correct if (longExpression + otherLongExpression + otherOtherLongExpression) { }
来源:CSDN
作者:YinShiJiaX
链接:https://blog.csdn.net/YinShiJiaW/article/details/104672924