C++編碼規(guī)范(2)_第1頁
C++編碼規(guī)范(2)_第2頁
C++編碼規(guī)范(2)_第3頁
C++編碼規(guī)范(2)_第4頁
C++編碼規(guī)范(2)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.1. 命名規(guī)則1.1. 起個合適的名字1.1.1.類的名稱(適用于C+ )2 類的名稱要能告訴我們,這個類是什么。因此,類的名稱通常是名詞。2 類的名字不需要告訴我們,它從哪個類繼承而來的。2 有時候加個后綴是很有用的。比如類是一個代理(Agents) 時,起名叫DownloadAgent更能表達(dá)真實的意圖。1.1.2.方法和函數(shù)的名稱(適用于C/C+ )2 方法和函數(shù)通常都要執(zhí)行某種行為,因此,名稱要能清楚的說明它做什么:CheckForErrors()而不是 ErrorCheck(),DumpDataToFile()而不是 DataFile() 。 這樣也可以很容易的區(qū)別函數(shù)和數(shù)據(jù)。2

2、函數(shù)名總以動詞開頭,后面跟隨其它名稱。這樣看起來更自然些。2 可以加一些必要的后綴:Max 表示取最大值Cnt 表示當(dāng)前的計數(shù)值Key 表示鍵值例如: RetryMax表示可接收的最大數(shù),RetryCnt表示當(dāng)前接收的數(shù)量。2 前綴也同樣有用:Is 用于詢問一些問題。只要看到Is 開頭,就知道這是一個查詢。Get 用于獲取一個值。Set 用于設(shè)置一個值。例如: IsHitRetryLimit.1.1.3.含有度量單位的名稱(適用于C/C+ )2 如果一個變量用于表示時間,重量或其它度量單位,應(yīng)把度量單位添加到名稱中,以便開發(fā)人員更早一步發(fā)現(xiàn)問題。例如:uint32 mTimeoutMsecs;

3、uint32 mMyWeightLbs;1.1.4.縮寫名稱不要全部大寫(適用于C/C+ )2 無論是什么縮寫名稱,我們總以一個大寫字母開頭,后面跟隨的字母全部用小寫。;.例如:class FluidOz;/而不是 FluidOZclass NetworkAbcKey;/而不是 NetworkABCKey1.2. 類的命名(適用于C+ )2 用大寫字母作為單詞的分隔,每個單詞的首字母大寫,其它字母均小寫。2 名字的第一個字母應(yīng)大寫2 不含有下劃線(_)例如:class NameOneTwo;class Name;1.3. 類庫(或程序庫)命名(適用于 C/C+ )2 使用命名空間防止名字沖突。

4、2 如果編譯器沒有實現(xiàn)命名空間,需要用前綴來避名名字沖突,不過前綴不要過長(2 個字母比較好)。例如:John Johnson完成了一個數(shù)據(jù)結(jié)構(gòu)的庫,它可以使用JJ 作為庫的前綴,所以類名就象下面這樣:class JjLinkList1.4. 方法和函數(shù)的命名(適用于C+ )2 使用與類名相同的規(guī)則例如:class NameOneTwopublic:intDoIt();voidHandleError();1.5. 類屬性的命名(適用于C+ );.2屬性(通常是非公有數(shù)據(jù)成員)名字以字母m 開頭。2在 m(m_) 后面,使用與類名相同的規(guī)則。2m(m_)總是位于其它修飾符(如表示指針的p )的前

5、面。例如:class NameOneTwopublic:intVarAbc();intErrorNumber();private:intmVarAbc;intmErrorNumber;String*mpName;1.6. 方法和函數(shù)參數(shù)的命名(適用于C+ )2 第一個字母必須小寫。2 第一個字母后面的單詞使用與類名相同的規(guī)則。例如:class NameOneTwopublic:intStartYourEngines(Engine&rSomeEngine,Engine&rAnotherEngine);1.7. 局部變量的命名(適用于C/C+ )2 所有字母都用小寫2 使用下劃線_ 作為單詞的分隔

6、。例如:intNameOneTwo:HandleError(int errorNumber);.interror= OsErr();Timetime_of_error;ErrorProcessor error_processor;1.8. 指針變量的命名前綴(適用于C/C+ )2 指針變量多數(shù)情況應(yīng)在前面加p 。2 星號 * 應(yīng)靠近類型,而不是變量名。例如:String* pName=new String;特別的: String* pName, name;應(yīng)分成兩行來寫:String* pName;String name;1.9. 引用變量和返回引用函數(shù)的命名前綴(適用于 C+ )2 引用必須

7、用r 作前綴修飾。例如:class Testpublic:voidDoSomething(StatusInfo&rStatus);StatusInfo&rStatus();constStatusInfo& Status() const; /這里返回的是常量引用,所以不符合本規(guī)則private:StatusInfo&mrStatus;1.10.全局變量的命名前綴(適用于C/C+ )2 全局變量總是以g(g_) 作為前綴。;.例如:Logger g_Log;Logger* g_pLog;1.11.全局常量的命名(適用于C/C+ )2 全局常量全部大寫,并以下劃線_ 分隔單詞。例如:const in

8、tA_GLOBAL_CONSTANT = 5;1.12.靜態(tài)變量的命名前綴(適用于C+ )2 靜態(tài)變量以s 作為前綴。例如:class Testpublic:private:staticStatusInfo m_sStatus;1.13. 自定義類型( typedef )的命名(適用于 C/C+ )2類型定義名稱指的是用typedef 定義的名稱。2類型定義名稱使用與類名相同的規(guī)則,并使用Type 作為后綴。例如:typedefuint16ModuleType;typedefuint32SystemType;1.14.宏定義的命名(適用于C/C+ )2 所有單詞的字母都用大寫,并使用下劃線_

9、分隔 .例如:#define MAX(a,b) blah#define IS_ERR(err) blah1.15.C 函數(shù)的命名(適用于C/C+ );.2C+ 項目中,應(yīng)盡量少用C 函數(shù)。2C 函數(shù)使用 GNU 規(guī)范,所有字母都使用小寫,并用下劃線_ 作為單詞的分隔。例如:intsome_bloody_function()2 特別的,為了賺容C/C+ ,在必要的時候,在C+ 中應(yīng)以下面的格式定義C 函數(shù):extern“ C” int some_bloody_function();2 或在 C/C+ 中推薦使用下面的格式:#ifdef_cplusplus_extern“ C”#endifints

10、ome_bloody_function()#ifdef_cplusplus_#endif1.16.枚舉的命名(適用于C/C+ )2 所有字母都大寫,并用下劃線_ 作為單詞分隔。例如:enumPinStateTypePIN_OFF,PIN_ON;enum STATE_ERR, STATE_OPEN, STATE_RUNNING, STATE_DYING;2. 排版規(guī)則;.2.1. 布局和模板2.1.1.類的布局模板(適用于 C+ )2 請使用下面的模板來創(chuàng)建一個新的類:/* 用一行來描述類*#include XX.h *-llib* 類的詳細(xì)說明* seesomething*/#ifndef S

11、ORUTION_PROJECT_CLASSNAME_H#define SORUTION_PROJECT_CLASSNAME_H/ 在這里包含系統(tǒng)頭文件/ 在這里包含項目頭文件/ 在這里包含局部頭文件/ 在這里放置前置引用/class XX;.operator =(XX&from);.public :/ 類的生命周期控制函數(shù),如構(gòu)造和析構(gòu),以及狀態(tài)機/*Default constructor.*/XX( void );/*Copy constructor.*param from The value to copy to this object.*/XX( const XX& from);/*De

12、structor.*/virtual XX(void );/ 在這里放置類的運算操作符/*Assignment operator.*param from THe value to assign to this object.*return A reference to this object.*/XX&/ 在這里放置類的操作/ 在這里放置屬性存取;./ 在這里放置類的狀態(tài)查詢protected :private :;/ 內(nèi)聯(lián)方法定義/ 外部引用/#endif/ SORUTION_PROJECT_CLASSNAME_H2定義的順序是 : public, protected, private2要清

13、楚 public/protected/private都應(yīng)該放置哪些東西2.1.2.源文件格式(適用于C+ )#include XX.h/ class implemented/ PUBLIC/=構(gòu)造函數(shù) =XX:XX()/ XXXX:XX( const XX&)/ XXXX:XX();./ XX/=操作符 =XX&XX: operator =(XX&);return *this ;/ =/=類的操作=/=屬性存取=/=狀態(tài)查詢=/ PROTECTED / PRIVATE/2.1.3.保護(hù)頭文件不被重復(fù)包含(適用于 C/C+ )2 應(yīng)使用宏定義來保護(hù)頭文件不被重復(fù)包含:#ifndef SORUTI

14、ON_PROJECT_CLASSNAME_H#define SORUTION_PROJECT_CLASSNAME_H#endif / SORUTION_PROJECT_CLASSNAME_H2 如果使用命名空間的時候,要把命名空間加到文件名前面:#ifndef SORUTION_PROJECT_NAMESPACE_CLASSNAME_H #define SORUTION_PROJECT_NAMESPACE_CLASSNAME_H#endif;.2.1.4.方法和函數(shù)的布局(適用于 C/C+ )2 對于有較多參數(shù)的函數(shù)的寫法如果參數(shù)較多,一行寫不下,我們應(yīng)該分成幾行來寫,并且每個參數(shù)都另起一行對

15、齊:int AnyMethod(int arg1,intarg2,intarg3,intarg4); 或int AnyMethod(intarg1, int arg2, int arg3, int arg4);2.2. 縮進(jìn)、制表符以及空格(適用于 C/C+ )2縮進(jìn)的時候,每一層縮進(jìn)3 ,4 ,或 8 個空格。(推薦使用4 個空格)2不要使用 TAB ,用空格,大多數(shù)編輯器可以用空格代替TAB 。 TAB 應(yīng)固定 4 個空格,因為大多數(shù)編輯器都是這么設(shè)置的。2雖然沒有規(guī)定縮進(jìn)的層次,但是4 至 5 層是合適的。如果縮進(jìn)的層次太多,你可能需要考慮是否進(jìn)行代碼重構(gòu)了。例如:voidfunc()i

16、f (something bad)if (another thing bad)while (more input);.2.3. 盡量使一行不要超過78 個字母 (適用于 C/C+ )2 有 多 器屏幕只有78 個字母 2.4. 保證一行只寫一條語句(適用于 C/C+ )2 一行最多只寫一條 句2 一行只定 一個 量例如:不要象下面 : char* a, *x;int width, height; /widthand height of image要象 :char* a= 0; /文檔 明char* x= 0; /文檔 明2.5. 花括號 規(guī)則 (適用于 C/C+ )2.5.1.花括號的位置2

17、在關(guān) 字的下一行 獨放置括號,并且與關(guān) 字 ,如:if (condition).while (condition)2.5.2.什么時候應(yīng)使用花括號所有的 if, while 和 do 句,要么用 行格式,要么使用花括號格式。2 使用花括號格式:if (1 = somevalue);.somevalue = 2;2 單行格式:if (1 = somevalue) somevalue = 2;或下面這樣(對于這種寫法,建議使用花括號):if (1 = somevalue)somevalue = 2;2.5.3.在花括號結(jié)束的位置加上注釋2 在花括號結(jié)束的位置加上注釋是一個好習(xí)慣。假如前后花括號距離

18、很遠(yuǎn),注釋就能幫你理解它是如何對應(yīng)的。如:while (1)if (valid) / if valid else / not valid / end forever2.5.4.注意屏幕大小2 一個語句塊盡量不超過一個屏幕大小,這樣,不要卷動屏幕就可以閱讀代碼。2.6. 圓括號 () 規(guī)則 (適用于 C/C+ )2 圓括號與關(guān)鍵字之間應(yīng)放一個空格。2 圓括號與函數(shù)名之間不要有空格。2 Return 語句不要使用圓括號。例如:if (condition);.while(condition)strcpy(s, s1);return 1;2.7.if else語句的格式 (適用于 C/C+ )2 布局

19、if ( 條件 )/注釋else if ( 條件 )/注釋else/注釋2 條件格式總是把常量放在等號或不等于號的左邊:if ( 6 = errorNum ) .一個很重要的理由是,假如漏寫一個等號,這種寫法會產(chǎn)生一個編譯錯誤,有助于馬上發(fā)現(xiàn)問題。比如:if ( errorNum = 6) .錯寫成:if ( errorNum = 6) . /這是一個不容易發(fā)現(xiàn)的災(zāi)難2.8.switch格式 (適用于 C/C+ )2 直通的 case 語句,應(yīng)該放置一條注釋說明這個case 語句是直通到下一個case 語句的。;.2 總是要寫default 語句,不管是否是需要。2 在 case 中需要定義變

20、量的時候,應(yīng)把所有代碼放在語句塊中。例如:switch (.)case 1:./ 繼續(xù)執(zhí)行case2case 2:int v;.break ;default :2.9. 使用 goto,continue,break 和 ?: (適用于 C/C+ )2.9.1.Goto2 盡量避免使用Goto 語句。一個合理使用goto 語句的場合是,當(dāng)你需要從多層循環(huán)中跳出。例如:for (.)while (.).if (disaster)goto error; /跳出循環(huán);.error:clean up the mess2 跳轉(zhuǎn)的標(biāo)號必須單獨在一行的最左邊。Goto 語句需要有相應(yīng)的注釋,說明它的用途。2.9.2.Continue and Break2 Continue和 break 實際上起到與goto 一樣的作用,因此,盡量少用為上。并且,Continue與 break 最好不要連用。2.9.3.?:2 用括號把條件表達(dá)式括起來。2 不要在 ? : 中寫上過多的代碼,操作表達(dá)式應(yīng)盡可能簡潔。2 操作語句應(yīng)分行寫,除非它們能夠簡潔的放在一行當(dāng)中。例如:(condition) ?funct1() : func2();或(conditio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論