標籤:keyword not pop back body log 名稱 gui ace
1.行長度
每一行代碼字元數不超過80。
例外:
1)假設一行凝視包括了超過80字元的命令或URL,出於複製粘貼的方便能夠超過80字元;
2)包括長路徑的能夠超出80列,盡量避免;
3)標頭檔保護能夠無視該原則
2.非ASCII字元
盡量不使用非ASCII字元,使用時必須使用UTF-8格式。
盡量不將字串常量耦合到代碼中。比方獨立出資源檔。
3.空格還是製表位
僅僅使用空格,每次縮排2個空格。
使用空格進行縮排,不要在代碼中使用tab,設定編輯器將tab轉為空白格。
4.函式宣告與定義
傳回型別和函數名在同一行,合適的話,參數也放在同一行。
注意一下幾點:
1)傳回值總是和函數名在同一行。
2)左圓括弧總是和函數名在同一行;
3)函數名和左圓括弧間沒有空格;
4)圓括弧和參數間沒有空格;
5)左大括弧總在最後一個參數同一行的末尾處。
6)右大括弧總是單獨位於函數最後一行。
7)右圓括弧和左大括弧間總是有一個空格。
8)函式宣告和實現處的全部形參名稱必須保持一致;
9)全部形參應儘可能對齊。
10)預設縮排為2個空格;
11)獨立封裝的參數保持4個空格的縮排。
假設函數為const的,keywordconst應與最後一個參數位於同一行。
假設有些參數沒實用到,在函數定義出將參數名凝視起來。
5.函數調用
盡量放在同一行,否則,將實參封裝在圓括弧裡:
bool retval = DoSomething(argumengt1,argument2,argument3);
假設同一行放不下。可斷為多行,後面每一行都和第一個實參對齊。左圓括弧和右圓括弧前不要留空格:
bool retval = DoSomething(averyveryverylongargument1,argument2,argument3);
假設函數參數比較多,能夠處於可讀性的考慮每行僅僅放一個參數:
bool retval = DoSomething(argument1,
argument2,
argument3,
argument4);
假設函數名太長。以至於超過行最大長度。能夠將全部參數獨立成行:
if(...) {
...
...
if(...) {
DoSomethingThatRequiresALongFunctionName(
very_long_argument1,
argument2,
argument3,
argument4);
}
}
6.條件陳述式
更提倡不在圓括弧裡加入空格,keywordelse另起一行。
對基本條件陳述式有兩種能夠接受的格式。一種在圓括弧和條件之間有空格,一種沒有。
選擇哪一種。還是以一致性為主。
注意全部情況下,if和左圓括弧間有個空格。右圓括弧和左大括弧間也要有個空格。
if(condition) // Bad - space missing after IF.
if (condition){ // Bad - space missing before {.
if(condition){ // Doubly bad.
if (condition) { // Good - proper space after IF and before {
通常,單行語句不須要使用大括弧,假設你喜歡也無可厚非,也有人要求if必須使用大括弧。
但假設語句中哪一分支使用了大括弧的話,其它部分也必須使用:
// Not allowed - curly on IF but not ELSE
if (condition) {
foo;
} else
bar;
// Not allowed - curly on ELSE but not IF
if (condition)
foo;
else {
bar;
}
// Curly braces around both IF and ELSE required because
// one of the clauses used braces.
if (condition) {
foo;
} else {
bar;
}
7.迴圈和開關選擇語句
switch語句能夠使用大括弧分塊。空迴圈體應使用{}或continue。
switch 語句中的 case 塊能夠使用大括弧也能夠不用,取決於你的喜好,使用時要依下文所述。
假設有不滿足 case 枚舉條件的值。要總是包括一個 default(假設有輸入值沒有 case 去處理,編譯器將
警示)。
假設 default 永不會運行,能夠簡單的使用 assert:
switch (var) {
case 0: { // 2 space indent
... // 4 space indent
break;
}
case 1: {
...
break;
}
default: {
assert(false);
}
}
空迴圈體應使用{}戒 continue,而丌是一個簡單的分號:
while (condition) {
// Repeat test until it returns false.
}
for (int i = 0; i < kSomeNumber; ++i) {} // Good - empty body.
while (condition) continue; // Good - continue indicates no logic.
while (condition); // Bad - looks like part of do/while loop.
8.指標和參考資料表達式
句點(.)或箭頭(->)前後不要有空格,指標/地址操作符(*,&)後不要有空格。
在聲明指標變數或參數時,星號和類型或變數名緊挨都能夠:
// These are fine, space preceding.
char *c;
const string &str;
// These are fine, space following.
char* c; // but remember to do "char* c, *d, *e, ...;"!
const string& str;
char * c; // Bad - spaces on both sides of *
const string & str; // Bad - spaces on both sides of &
同一個檔案(建立或現有)中起碼要保持一致。
9.布林運算式
假設一個布林運算式超過標準行寬(80字元)。假設要斷行要統一一下。
if (this_one_thing > this_other_thing &&
a_third_thing == a_fourth_thing &&
yet_another & last_one) {
...
}
10.函數傳回值
return運算式中不要使用圓括弧。
函數返回時不要使用圓括弧。
11.變數及數組初始化。
選擇=還是()。
12.預先處理指令
預先處理指令不要縮排。從行首開始。
即使預先處理指令位於縮排代碼塊中。指令也應從行首開始。
// Good - directives at beginning of line
if (lopsided_score) {
#if DISASTER_PENDING // Correct -- Starts at beginning of line
DropEverything();
#endif
BackToNormal();
}
// Bad - indented directives
if (lopsided_score) {
#if DISASTER_PENDING // Wrong! The "#if" should be at beginning of line
DropEverything();
#endif // Wrong! Do not indent "#endif"
BackToNormal();
}
13.類格式
聲明屬性依次序是public、protected、private。每次縮排一個空格。
除第一個關鍵詞外。其它關鍵詞前空一行,假設類比較小的話也能夠不空。
14.初始化列表
建構函式初始化列表放在同一行或按四格縮排並排幾行。
兩種能夠接受的初始化列表格式:
// When it all fits on one line:
MyClass::MyClass(int var) : some_var_(var), some_other_var_(var + 1) {
或
// When it requires multiple lines, indent 4 spaces, putting the colon on
// the first initializer line:
MyClass::MyClass(int var)
: some_var_(var), // 4 space indent
some_other_var_(var + 1) { // lined up
...
DoSomething();
...
}
15.命名空間格式化
命名空間內容不縮排。
命名空間不加入額外縮排層次,比如:
namespace {
void foo() { // Correct. No extra indentation within namespace.
...
}
} // namespace
不要縮排:
namespace {
// Wrong. Indented when it should not be.
void foo() {
...
}
} // namespace
16.水平空白
水平空白的使用因地制宜。
不要在行尾加入無謂的空白。
17.垂直空白
垂直空白越少越好。
不要在兩個函數定義之間空超過2行,函數體頭、尾不要有空行。函數體中也不要任意加入空行。
Google C++ style guide——格式