找回密码
 立即注册
Qt开源社区 门户 查看内容

Qt代码风格

2019-9-18 06:35| 发布者: admin| 查看: 469| 评论: 0

摘要: Qt官方代码风格,可以参考一下。缩进使用4个空格;注意:使用空格而不是制表符(Tab按键)。声明变量在单独的行上声明每个变量;避免使用简短或无意义的名称(例如"a",“rbarr”,“nughdeget”);单个字符变量名称仅 ...

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;
constchar*const y ="hello";

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

  • 每个逗号后留一个空格;

  • 转换模式的使用后没有空格;
  • 尽可能避免使用C风格的转换;

  不恰当用法:
char* blockOfMemory =(char*)malloc(data.size());

  纠正:
char*blockOfMemory =reinterpret_cast<char*>(malloc(data.size()));

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

  • 控制流语句的主体上使用一个新行;
  不恰当用法:if(foo)bar();

  纠正:
if(foo)
bar();

花括号


  • 使用附加花括号的情况:左花括号与语句的开头位于同一行。如果右花括号后跟另一个关键字,它也会进入同一行;
  不恰当用法:if(codec)
{
}
else
{
}

  纠正:
if(codec){
}else{
}

  • 例外情况:函数实现(但不是lambda)和类声明总是在行的开头有左括号;
staticvoidfoo(int g)
{
qDebug("foo: %i", g);
}

classMoo
{
};

  • 仅当条件语句的主体包含多行时才使用花括号:
  不恰当用法:if(address.isEmpty()){
returnfalse;
}

for(int i =0; i <10;++i){
qDebug("%i", i);
}

  纠正:
if(address.isEmpty())
returnfalse;

for(int i =0; i <10;++i)
qDebug("%i", i);

  • 例外1:如果父条件语句包含多行或换行,也可以使用花括号:
if(address.isEmpty()||!isValid()
||!codec){
returnfalse;
}

  • 例外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
----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Qt君,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了