命名應該含義明確,不要為了節省空間使用縮寫。
int n; // bad - 無明確含義的單字母名稱
string cstmrname; // bad - 非約定俗成的縮寫
int width, height; // ok - 含義明確
int numcolors; // ok - num屬於約定俗成的縮寫
for (int i = 0; i < 100; ++i) // ok - 迴圈變數可以使用單個字母的命名
template
// ok - t用做模板引數屬於約定俗成的寫法
首字母縮寫詞只在需要時大寫第乙個字母。
class urltable // bad
class urltable // ok
string xmlfilename; // bad
string xmlfilename; // ok
檔名全部為小寫,單詞之間沒有其它符號。標頭檔案以.h為副檔名,實現檔案以.cpp為副檔名。一般情況下,乙個類對應乙個.h檔案和乙個.cpp檔案,檔名與類的名字相同。
所有型別,包括類、結構體、列舉(包括列舉項)、和型別定義(typedef)等,遵循相同的命名方式:每個單詞的第乙個字母大寫。型別名一般為名詞。
class foobar
;struct barbaz
;enum colorchannel
;typedef hash_mappropertiesmap;
using propertiesmap = hash_map;
在對列舉項命名時,為了避免歧義,列舉項名稱中應至少包含列舉型別名稱中的乙個單詞。
enum
casesensitivity
; // bad
enum
casesensitivity
; // good
變數名(包括函式的引數),第乙個字母小寫,後面每個單詞的第乙個字母大寫。不要使用匈牙利命名法(變數名前加表示型別的字首)。
int inumimages; // bad
int numimages; // ok
string strtablename; // bad
string tablename; // ok
類的成員變數加m_字首,結構體的成員變數則不加任何字首。全域性變數加g_字首。靜態成員變數不加字首。
class urltableproperties
;struct imageinfo
;
vector、list、map等容器型別的變數,使用名詞的複數形式表示。
vector
holidays;
map employeeroles;
qvectorimages;
函式的第乙個字母小寫,後面每個單詞的第乙個字母大寫。qt中的slot採用和函式一樣的命名方式。
// 常見的函式命名方式
add()
// 動詞
addtableentry()
// 動詞+名詞
setcolor()
// set+名詞
hasfocus()
// has+名詞
canconvert()
// can+動詞
canchangeproperty()
// can+動詞+名詞
tobase64()
// to+名詞
isarray()
// is+名詞
isempty()
// is+形容詞
ischecked()
// is+形容詞
ismovingenabled()
// is+形容詞
color()
// 名詞前面的get可以省略
autocompletion()
// 名詞前面的is可以省略
常量採用和變數相同的命名方式。
const
int daysinaweek = 7;
巨集定義用大寫字母表示,單詞之間用下劃線分割。
#define round(x) ...
#define pi_rounded 3.0
命名空間採用和型別相同的命名,即每個單詞的第乙個字母大寫。
namespace foobar
;
花括號應獨佔一行,除非花括號用來表示可用一行**表示的inline的函式體,或表示初始化列表。
class foo
private:
struct bar
;};int foobar()
for (int i = 0; i < 10; ++i)
int array = ;
必須有乙個空格的位置:
- 二元操作符,包括賦值符號的兩側
- 關鍵字和圓括號之間
- 不在行末的逗號和分號後
- 表示繼承和初始化列表的冒號兩側
- 只有一行語句的函式體的花括號與語句之間
- delete和之間,以及和變數名之間
不能有空格的位置:
- 逗號和分號前
- 圓括號和尖括號內側
- 函式名和圓括號之間
- 一元操作符和運算元之間
- 空的圓括號和花括號中
- 表示初始化列表的花括號和值之間
- 範圍操作符(::)兩側
- #號右側
class foo : public bar
void reset()
private:
int m_baz;
}for (int i = 0; i < 5; ++i)
x = 0;
x = -5;
++x;
if (x && !y)
delete buffer;
表示指標和引用的符號和&和型別之間加乙個空格,但和&與變數名之間不加空格。
char *filename;
const qstring &filename;
可以使用空行將**分組,但不要使用超過乙個空行。
所有標頭檔案都要使用#ifndef #define #endif防止標頭檔案被多重包含。不要使用#pragma once。
#ifndef foo_bar_h
#define foo_bar_h
...#endif // foo_bar_h
標頭檔案本身應包含所有需要的標頭檔案,以便在引用它時不需要首先包含其它的標頭檔案。在標頭檔案中,按照下面的順序包含需要的標頭檔案:c標準庫,c++標準庫,其它庫的標頭檔案,專案內的其它標頭檔案。在引用標頭檔案的.cpp檔案中,總是把它對應的標頭檔案放在其它所有標頭檔案的前面。同種型別的標頭檔案按照字母表的順序決定哪個放在前面。避免包含不必要的標頭檔案。
// foo.cpp檔案
#include "foo.h" // foo.cpp related header
#include // c library
#include // c library
#include // c++ library
#include // c++ library
#include // qt library
#include "bar.h" // other header files in your project
注釋符號可以使用//,也可以使用/**/。注釋符號和注釋內容之間有乙個空格。注釋在一行的末尾時,注釋符號和**之間要有乙個空格。 編碼風格不是編碼規範
我並不認為程式設計師是乙個情緒特別豐富的群體。但有一些事情卻能很容易刺激程式設計師的神經,那就是 格式和布局。如果看到乙個函式的括弧在同一行上沒有閉合,我的眼睛會噴血。如果看到有人沒有恰好的在兩個函式間留一空行,我的小腿會抽筋。但重點在這裡 除非是在家裡開發自己的業餘愛好軟體,我的這些個人喜好其實是...
PSR 2 編碼風格規範
必須 使用 4 個空格符而不是 tab 鍵 進行縮排。每行的字元數 應該 軟性保持在 80 個之內,理論上 一定不可 多於 120 個,但 一定不可 有硬性限制。每個 namespace 命名空間宣告語句和 use 宣告語句塊後面,必須 插入乙個空白行。類的開始花括號 也 必須 寫在函式主體後自成一...
python風格規範 Python風格規範
請務必保持 的一致性 如果你正在編輯 花幾分鐘看一下周邊 然後決定風格.如果它們在所有的算術操作符兩邊都使用空格,那麼你也應該這樣做.如果它們的注釋都用標記包圍起來,那麼你的注釋也要這樣.制定風格指南的目的在於讓 有規可循,這樣人們就可以專注於 你在說什麼 而不是 你在怎麼說 我們在這裡給出的是全域...