C/C++編寫規範之格式-(1)

閒來無事,把自用的C/C++編程規範整理一下。內容主要來自Google與華為,並參考了一點微軟。


整個項目服從統一的編程風格是很重要的,這樣才能讓所有人在閱讀和理解代碼時更加容易。

 

C/C++編寫規範之格式-(1)

C/C++編寫規範之格式

1.行長度

每一行代碼字符數不超過 80。

例外情況:

1) 如果一行註釋包含了超過80字符的命令或URL,出於複製粘貼的方便可以超過80字符;

2) 包含長路徑的可以超出80列,儘量避免;

3) 頭文件保護可以無視該原則。 

 

2.非ASCII字符

儘量不使用非ASCII字符,使用時必須使用 UTF-8 格式。

哪怕是英文,也不應將用戶界面的文本硬編碼到源代碼中,因此非ASCII字符要少用。特殊情況下可以適當包含此類字符.例如,代碼分析外部數據文件時,可以適當硬編碼數據文件中作為分隔符的非ASCII字符串;更常用的是(不需要本地化的)單元測試代碼可能包含非ASCII字符串。此類情況下,應使用UTF-8格式,因為很多工具都可以理解和處理其編碼,十六進制編碼也可以,尤其是在增強可讀性的情況下——如"\verb \\xEF\\xBB\\xBF"是Unicode的zero-width no-break space字符,以 UTF-8格式包含在源文件中是不可見的。

 

C/C++編寫規範之格式-(1)

3.縮進

只使用空格,每次縮進2個空格。不要在代碼中使用tabs,設定編輯器將tab轉為空格。

 

返回類型和函數名在同一行,合適的話,參數也放在同一行。

函數看上去像這樣:

ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) { DoSomething(); ...}

如果同一行文本較多,容不下所有參數:

ReturnType ClassName::ReallyLongFunctionName(Type par_name1, Type par_name2, Type par_name3) { DoSomething(); ...}

甚至連第一個參數都放不下:

ReturnType LongClassName::ReallyReallyReallyLongFunctionName( Type par_name1, // 4 space indent Type par_name2, Type par_name3) { DoSomething(); // 2 space indent ...}

注意以下幾點:

1) 返回值總是和函數名在同一行;

2) 左圓括號(open parenthesis)總是和函數名在同一行;

3) 函數名和左圓括號間沒有空格;

4) 圓括號與參數間沒有空格;

5) 左大括號(open curly brace)總在最後一個參數同一行的末尾處;

6) 右大括號(close curly brace)總是單獨位於函數最後一行;

7) 右圓括號(close parenthesis)和左大括號間總是有一個空格;

8) 函數聲明和實現處的所有形參名稱必須保持一致;

9) 所有形參應儘可能對齊;

10) 缺省縮進為2個空格;

11) 獨立封裝的參數保持4個空格的縮進。

如果函數為const的,關鍵字const應與最後一個參數位於同一行。

// Everything in this function signature fits on a single lineReturnType FunctionName(Type par) const { ...}// This function signature requires multiple lines, but// the const keyword is on the line with the last parameter.ReturnType ReallyLongFunctionName(Type par1, Type par2) const { ...}

如果有些參數沒有用到,在函數定義處將參數名註釋起來:

// Always have named parameters in interfaces.class Shape { public: virtual void Rotate(double radians) = 0;}// Always have named parameters in the declaration.class Circle : public Shape { public: virtual void Rotate(double radians);}// Comment out unused named parameters in definitions.void Circle::Rotate(double /*radians*/) {}// Bad - if someone wants to implement later, it's not clear what the// variable means.void Circle::Rotate(double) {}
C/C++編寫規範之格式-(1)

5.函數調用

儘量放在同一行,否則,將實參封裝在圓括號中。

函數調用遵循如下形式:

bool retval = DoSomething(argument1, argument2, argument3);

如果同一行放不下,可斷為多行,後面每一行都和第一個實參對齊,左圓括號後和右圓括號前不要留空格:

bool retval = DoSomething(averyveryveryverylongargument1, argument2, argument3);

如果函數參數比較多,可以出於可讀性的考慮每行只放一個參數:

bool retval = DoSomething(argument1, argument2, argument3, argument4);

如果函數名太長,以至於超過行最大長度,可以將所有參數獨立成行:

if (...) { ... ... if (...) { DoSomethingThatRequiresALongFunctionName( very_long_argument1, // 4 space indent argument2, argument3, argument4);}
C/C++編寫規範之格式-(1)

C/C++學習路線(收藏)

1、c語言入門 程序設計-算法-運算符-順序 分支 循環結構。

2、C語言精通 數組-函數字串符-指針-構造類型-預處理-存儲管理-文件操作-數據結構。

3、c++入門 面對對象編程-類和對象-運算符重載-派生於繼承,異常處理技術-C++語言標準-數據結構-(雙向鏈表-雙向隊列-樹-圖)。

4、c++精通-stl標準模板庫(容器-迭代器-算法)正則表達式-boost標準模板庫-socket網絡編程-大型企業項目實戰:-員工信息管理系統-推箱子-俄羅斯方塊-服務器-播放器-人工智能。

5、windows高級工程師:win32/mfc-windows高級編程-QT框架編程-大型企業級項目實戰項目(人臉識別-車牌識別-局域網遠程監控-等項目)

6、linux系統應用程序開發-linux內核構架研究-linux頂級網絡服務器開發及搭建。

7、大型企業項目實戰(linux內核高級虛擬內存驅動設計-linux網絡間諜系統軟件-linux內核網絡數據劫持-linux網絡閱讀系統開發

C/C++編寫規範之格式-(1)

文章最後

怎麼快速學C/C++,有什麼方法,打算深入瞭解這個行業的朋友,可以加C/C++學習群:750+579+336,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2018最新的C/C++資料和0基礎入門教程,歡迎初學和進階中的小夥伴。

每天晚上20:00我都會開直播給大家分享C/C++遊戲編程學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,大家都是學習C/C++的,或是轉行,或是大學生,還有工作中想提升自己能力的前端黨,如果你是正在學習C/C++的小夥伴可以加入學習。最後祝所有程序員都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑。

C/C++編寫規範之格式-(1)

喜歡小編的文章的朋友可以關注、收藏、轉發、留言,閱讀愉快!!!


分享到:


相關文章: