首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

往期精选|Qt代码风格

Qt官方代码风格,可以参考一下。

缩进

使用4个空格;

注意:使用空格而不是制表符(Tab按键)。

声明变量

在单独的行上声明每个变量;

避免使用简短或无意义的名称(例如"a",“rbarr”,“nughdeget”);

单个字符变量名称仅适用于计数器和临时变量,其中变量的目的是为了显而易见;

  不恰当用法:

int a, b;

char *c, *d;

  纠正:

int height;

int width;

char *nameOfThis;

char *nameOfThat;

变量和函数以小写字母开头。变量名称中的每个连续单词都以大写字母开头;

避免使用缩写;

  不恰当用法:

short Cntr; // 不明确的缩写

char ITEM_DELIM = ' ';

  纠正:

short counter;

char itemDelimiter = ' ';

类始终以大写字母开头。如公共类以’Q’(QRgb)开头,后跟大写字母。公共函数通常以’q’(qRgb)开头;

首字母缩略词是驼峰式(例如QXmlStreamReader,而不是QXMLStreamReader)。

空白符

使用空行将语句组合在一起;

始终只使用一个空白行;

始终在关键字之后和大括号之前使用单个空格;

  不恰当用法:

if(foo){

}

  纠正:

if (foo) {

}

对于指针或引用,始终在类型和*或&之间使用单个空格,但在*或&与变量名称之间没有空格;

char *x;

const QString &myString;

const char * const y = "hello";

用空格包围二进制运算符;

每个逗号后留一个空格;

转换模式的使用后没有空格;

尽可能避免使用C风格的转换;

  不恰当用法:

char* blockOfMemory = (char* ) malloc(data.size());

  纠正:

char *blockOfMemory = reinterpret_cast(malloc(data.size()));

不要在同一行上放置多个语句;

控制流语句的主体上使用一个新行;

  不恰当用法:

if (foo) bar();

  纠正:

if (foo)

bar();

花括号

使用附加花括号的情况:左花括号与语句的开头位于同一行。如果右花括号后跟另一个关键字,它也会进入同一行;

  不恰当用法:

if (codec)

{

}

else

{

}

  纠正:

if (codec) {

} else {

}

例外情况:函数实现(但不是lambda)和类声明总是在行的开头有左括号;

static void foo(int g)

{

qDebug("foo: %i", g);

}

class Moo

{

};

仅当条件语句的主体包含多行时才使用花括号:

  不恰当用法:

if (address.isEmpty()) {

return false;

}

for (int i = 0; i < 10; ++i) {

qDebug("%i", i);

}

  纠正:

if (address.isEmpty())

return false;

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

qDebug("%i", i);

例外1:如果父条件语句包含多行或换行,也可以使用花括号:

if (address.isEmpty() || !isValid()

|| !codec) {

return false;

}

例外2:支持对称:在if-then-else块中也使用花括号,其中if-code或else-code包含多行:

  不恰当用法:

if (address.isEmpty())

qDebug("empty!"); // 这里不对称,容易造成误解

else {

qDebug("%s", qPrintable(address));

it;

}

  纠正:

if (address.isEmpty()) {

qDebug("empty!");

} else {

qDebug("%s", qPrintable(address));

it;

}

  不恰当用法:

// 多级嵌套语句没花括号容易逻辑错误

if (a)

else

if (b)

  纠正:

if (a) {

} else {

if (b)

}

当条件语句的主体为空时使用花括号

  不恰当用法:

while (a);

  纠正:

while (a) {}

括号

使用括号对表达式进行分组:

  不恰当用法:

if (a && b || c)

  纠正:

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

  不恰当用法:

a + b & c

  纠正:

(a + b) & c

switch语句

case与switch位于同一列;

每个case必须在结尾处有一个break(或return)声明,例外:

用于Q_FALLTHROUGH()表示故意不中断;

case后立刻进入下一个case。

switch (myEnum) {

case Value1:

doSomething();

break;

case Value2: // case后立刻进入下一个case

case Value3:

doSomethingElse();

Q_FALLTHROUGH();

default:

defaultHandling();

break;

}

跳转语句(break, continue, return, and goto)

跳转语句后不要放’else’。

  不恰当做法:

if (thisOrThat)

return;

else

somethingElse();

  纠正:

if (thisOrThat)

return;

somethingElse();

例外:如果代码本质上是对称的,则允许使用’else’来显示对称性。

换行

保持一行短于100个字符并在必要时换行。

注释/函数说明行应保持在80列实际文本之下。调整周围的文本布局,并尝试以避免“锯齿状”段落的方式流动文本。

在换行后的末尾加上逗号。

操作符从新行开始。如果编辑器太窄,则很容易忽略行尾的操作符。

  不恰当用法:

if (longExpression +

otherLongExpression +

otherOtherLongExpression) {

}

  纠正:

if (longExpression

+ otherLongExpression

+ otherOtherLongExpression) {

}

一般例外

如果严格遵循规则会使您的代码看起来很糟糕,请随意打破它。

如果任何给定模块中存在争议,则维护者对可接受的样式有最终决定权。

ref: https://wiki.qt.io/Qt_Coding_Style

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210118A0GA7700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券