Qt代碼風(fēng)格 [翻譯]

縮進(jìn)

  • 使用4個(gè)空格進(jìn)行縮進(jìn)
  • 使用空格,不要使用Tab來縮進(jìn)

變量聲明

  • 每個(gè)變量聲明使用單獨(dú)一行
  • 避免使用過于簡化或沒有意義的名稱(如商蕴,"a", "rbarr", "nughdeget")
  • 單字符的變量名僅僅在含義非常明顯的場景可以使用绪商,如計(jì)數(shù)或臨時(shí)字符
 // 錯(cuò)誤
 int a, b;
 char *c, *d;

 // 正確
 int height;
 int width;
 char *nameOfThis;
 char *nameOfThat;
  • 只要在需要時(shí)才聲明變量
  • 變量名和方法明使用小寫字母開頭,后面連續(xù)的單詞首字母大寫例书。
  • 不要使用縮略
 // 錯(cuò)誤
 short Cntr;
 char ITEM_DELIM = ' ';

 // 正確
 short counter;
 char itemDelimiter = ' ';
  • 類名稱永遠(yuǎn)使用大寫字母開頭。公開類以'Q'開頭织狐,后接大寫字母(QRgb)旺嬉。公共方法通常以'q'開頭(qRgb)邪媳。
  • 縮略詞在開頭的也是用駝峰樣式(如荡陷,QXmlStreamReader, 而不是 QXMLStreamReader)徽龟。

空格

  • 使用空行將語句組合在適合的地方
  • 始終只使用一個(gè)空白行
  • 始終在關(guān)鍵字之后和大括號之前添加一個(gè)空格:
 // 錯(cuò)誤
 if(foo){
 }

 // 正確
 if (foo) {
 }
  • 對于指針或引用,始終在類型和“”或“&”之間使用單個(gè)空格极颓,但在“”或“&”與變量名稱之間不要有空格。
 char *x;
 const QString &myString;
 const char * const y = "hello";
  • 在二元運(yùn)算符前后添加空格
  • 在類型轉(zhuǎn)換關(guān)鍵詞后不要添加空格
  • 盡量避免使用C風(fēng)格的類型轉(zhuǎn)換
 // 錯(cuò)誤
 char* blockOfMemory = (char* ) malloc(data.size());

 // 正確
 char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
  • 不要把多個(gè)語句放在一行上
  • 通過擴(kuò)展,對控制流程語句的主體使用一個(gè)新行:(原句:By extension, use a new line for the body of a control flow statement:)
 // 錯(cuò)誤
 if (foo) bar();

 // 正確
 if (foo)
     bar();

大括號

  • 使用緊連的大括號:大括號與聲明的開頭位于同一行。 如果右大括號后跟另一個(gè)關(guān)鍵字,也要放在一行中:
 // 錯(cuò)誤
 if (codec)
 {
 }
 else
 {
 }

 // 正確
 if (codec) {
 } else {
 }
  • 例外:函數(shù)實(shí)現(xiàn)(但不是lambda表達(dá)式)和類聲明始終在新行行首添加左括號:
 static void foo(int g)
 {
     qDebug("foo: %i", g);
 }

 class Moo
 {
 };
  • 僅當(dāng)條件語句的主體包含多行時(shí)才使用花括號:
 // 錯(cuò)誤
 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的主體或else的主體有幾行:
 // 錯(cuò)誤
 if (address.isEmpty())
     qDebug("empty!");
 else {
     qDebug("%s", qPrintable(address));
     it;
 }

 // 正確
 if (address.isEmpty()) {
     qDebug("empty!");
 } else {
     qDebug("%s", qPrintable(address));
     it;
 }

 // 錯(cuò)誤
 if (a)
     …
 else
     if (b)
         …

 // 正確
 if (a) {
     …
 } else {
     if (b)
         …
 }
  • 當(dāng)條件語句的主體為空時(shí)盼砍,使用花括號
 // 錯(cuò)誤
 while (a);

 // 正確
 while (a) {}

小括號

  • 使用小括號將表達(dá)式分組:
 // 錯(cuò)誤
 if (a && b || c)

 // 正確
 if ((a && b) || c)

 // 錯(cuò)誤
 a + b & c

 // 正確
 (a + b) & c

switch語句

  • case關(guān)鍵詞與switch位于同一列
  • 每個(gè)case最后都必須有一個(gè)break(或return)語句浇坐,或者使用Q_FALLTHROUGH()來表示有意不中斷,除非要后面緊接另一個(gè)case的內(nèi)容觉渴。
 switch (myEnum) {
 case Value1:
   doSomething();
   break;
 case Value2:
 case Value3:
   doSomethingElse();
   Q_FALLTHROUGH();
 default:
   defaultHandling();
   break;
 }

跳轉(zhuǎn)語句 (break, continue, return, and goto)

  • 不要將else放在在跳轉(zhuǎn)語句的后面:
 // 錯(cuò)誤
 if (thisOrThat)
     return;
 else
     somethingElse();

 // 正確
 if (thisOrThat)
     return;
 somethingElse();
  • 例外:如果代碼本身是對稱的,則允許使用else來顯示對稱性

換行

  • 保持一行少于100個(gè)字符; 如有必要?jiǎng)t折行
    • 注釋/ apidoc行應(yīng)保持在實(shí)際文本的80列以下。 根據(jù)周圍內(nèi)容進(jìn)行調(diào)整漱挚,避免“鋸齒”段落的方式(原文:Comment/apidoc lines should be kept below 80 columns of actual text. Adjust to the surroundings, and try to flow the text in a way that avoids "jagged" paragraphs.)
  • 逗號在被折斷行的行尾旨涝,操作符在新行的行首。操作符在行尾很容易被隱藏起來弧腥,如果編輯器比較窄的話。
 // 錯(cuò)誤
 if (longExpression +
     otherLongExpression +
     otherOtherLongExpression) {
 }

 // 正確
 if (longExpression
     + otherLongExpression
     + otherOtherLongExpression) {
 }

一般例外

  • 當(dāng)嚴(yán)格遵守規(guī)則使你的代碼看起來很糟糕的時(shí)候更鲁,不要遵守

風(fēng)格藝術(shù)

可以使用下面的代碼風(fēng)格使得你的代碼更有藝術(shù)性

--style=kr 
--indent=spaces=4 
--align-pointer=name 
--align-reference=name 
--convert-tabs 
--attach-namespaces
--max-code-length=100 
--max-instatement-indent=120 
--pad-header
--pad-oper

請注意澡为,“無限制”--max-instatement-indent僅用于astyle媒至,因?yàn)槿绻罄m(xù)行需要縮進(jìn)限制筋夏,astyle不夠智能以包裝第一個(gè)參數(shù)。 鼓勵(lì)您手動(dòng)限制在語句縮進(jìn)大約50個(gè)列:(原文:Note that "unlimited" --max-instatement-indent is used only because astyle is not smart enough to wrap the first argument if subsequent lines would need indentation limitation. You are encouraged to manually limit in-statement-indent to roughly 50 colums:)

    int foo = some_really_long_function_name(and_another_one_to_drive_the_point_home(
            first_argument, second_argument, third_arugment));

官方原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末指蚜,一起剝皮案震驚了整個(gè)濱河市摊鸡,隨后出現(xiàn)的幾起案子免猾,更是在濱河造成了極大的恐慌获三,老刑警劉巖疙教,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葵诈,死亡現(xiàn)場離奇詭異,居然都是意外死亡徊都,警方通過查閱死者的電腦和手機(jī)主之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門槽奕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粤攒,“玉大人囱持,你說我怎么就攤上這事纷妆。” “怎么了掩幢?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我肿轨,道長,這世上最難降的妖魔是什么驹暑? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任帆焕,我火速辦了婚禮财饥,結(jié)果婚禮上钥星,老公的妹妹穿的比我還像新娘。我一直安慰自己编饺,他們只是感情好豁鲤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布锅论。 她就那樣靜靜地躺著炫狱,像睡著了一般嬉荆。 火紅的嫁衣襯著肌膚如雪鄙早。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音省古,去河邊找鬼惜互。 笑死训堆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼则奥,長吁一口氣:“原來是場噩夢啊……” “哼逞度!你這毒婦竟也來了俊戳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤恃锉,失蹤者是張志新(化名)和其女友劉穎肪跋,沒想到半個(gè)月后州既,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體序臂,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年签赃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锦聊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卑吭,死狀恐怖挣菲,靈堂內(nèi)的尸體忽然破棺而出椭赋,到底是詐尸還是另有隱情,我是刑警寧澤件已,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站枢冤,受9級特大地震影響连茧,放射性物質(zhì)發(fā)生泄漏客扎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一搓幌、第九天 我趴在偏房一處隱蔽的房頂上張望饲趋。 院中可真熱鬧奕塑,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩页。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斋陪,已是汗流浹背衍锚。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人输莺。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容