閒來無事,把自用的C/C++編程規範整理一下。內容主要來自Google與華為,並參考了一點微軟。
整個項目服從統一的編程風格是很重要的,這樣才能讓所有人在閱讀和理解代碼時更加容易。
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格式包含在源文件中是不可見的。
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) {}
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語言入門 程序設計-算法-運算符-順序 分支 循環結構。
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++,有什麼方法,打算深入瞭解這個行業的朋友,可以加C/C++學習群:750+579+336,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2018最新的C/C++資料和0基礎入門教程,歡迎初學和進階中的小夥伴。
每天晚上20:00我都會開直播給大家分享C/C++遊戲編程學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,大家都是學習C/C++的,或是轉行,或是大學生,還有工作中想提升自己能力的前端黨,如果你是正在學習C/C++的小夥伴可以加入學習。最後祝所有程序員都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑。
喜歡小編的文章的朋友可以關注、收藏、轉發、留言,閱讀愉快!!!
閱讀更多 往事C語言 的文章