C C++語(yǔ)言編程規(guī)范.doc_第1頁(yè)
C C++語(yǔ)言編程規(guī)范.doc_第2頁(yè)
C C++語(yǔ)言編程規(guī)范.doc_第3頁(yè)
C C++語(yǔ)言編程規(guī)范.doc_第4頁(yè)
C C++語(yǔ)言編程規(guī)范.doc_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C、C+語(yǔ)言編程規(guī)范一目的 良好的編程風(fēng)格是提高程序可靠性非常重要的手段,也是大型項(xiàng)目多人合作開(kāi)發(fā)的技術(shù)基礎(chǔ)。為了提高C/C+源程序的質(zhì)量和可維護(hù)性,通過(guò)本規(guī)范定義來(lái)避免不好的編程風(fēng)格,增強(qiáng)程序的易讀性,便于自己及他人閱讀。本規(guī)范的內(nèi)容包括:排版、注釋、標(biāo)識(shí)符命名、可讀性、變量、結(jié)構(gòu)、函數(shù)、過(guò)程、可測(cè)性、質(zhì)量保證等。二排版1、相對(duì)獨(dú)立的程序塊之間要加空行分隔,在每個(gè)類聲明之后、每個(gè)函數(shù)定義結(jié)束之后都要加空行,變量聲明與執(zhí)行代碼之間加空行分隔(C+代碼中變量聲明與使用合在一起的可不加空行)。2、函數(shù)或過(guò)程的開(kāi)始、類或結(jié)構(gòu)的定義、枚舉的定義及循環(huán)、判斷等語(yǔ)句中以及折行的代碼都要采用縮進(jìn)風(fēng)格。每次縮進(jìn)一個(gè)制表符寬度,或者縮進(jìn)2個(gè)或4個(gè)空格寬度,代碼中應(yīng)統(tǒng)一使用制表符或空格來(lái)進(jìn)行縮進(jìn),不可混用,否則在使用不同的源代碼閱讀工具時(shí)制表符將因?yàn)橛脩粼O(shè)置的不同而擴(kuò)展為不同的寬度,造成顯示混亂。制表符具有占用字節(jié)少、易定位、不容易錯(cuò)位(使用空格縮進(jìn)容易出現(xiàn)多一個(gè)或少一個(gè)空格的現(xiàn)象,看上去不明顯,但卻是錯(cuò)位的)、擴(kuò)展寬度可設(shè)置的優(yōu)點(diǎn),推薦使用。3、較長(zhǎng)的語(yǔ)句(80字符,或以編輯屏幕可見(jiàn)范圍為準(zhǔn))要分成多行書寫(折行),長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。4、循環(huán)、判斷等語(yǔ)句中若有較長(zhǎng)的表達(dá)式或語(yǔ)句,則要進(jìn)行適應(yīng)的劃分,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。5、若函數(shù)或過(guò)程中的參數(shù)列表較長(zhǎng),則要進(jìn)行適當(dāng)?shù)膭澐帧?、特殊情況下,長(zhǎng)代碼的折行可采用靈活的方式,宗旨是使代碼易讀。7、劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),以便識(shí)別。將一行代碼劃分為多行時(shí),劃分出的新行的縮進(jìn)量要一致。8、一行代碼只做一件事情,例如只定義一個(gè)變量,或只寫一條語(yǔ)句,這樣的代碼容易閱讀,并且方便于寫注釋。不允許把多個(gè)短語(yǔ)句寫在一行中,特殊代碼(例如宏)除外。9、if、for、do、while、case、switch、default、continue、goto、extern、return、typedef等語(yǔ)句自占一行,且if、for、do、while等語(yǔ)句的執(zhí)行語(yǔ)句部分無(wú)論多少都要用大括號(hào)和括起來(lái)。10、C/C+語(yǔ)言是用大括號(hào)和界定一段程序塊的,編寫程序塊時(shí)和應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左對(duì)齊??蘸瘮?shù)或簡(jiǎn)單的內(nèi)聯(lián)函數(shù)除外。在函數(shù)體的開(kāi)始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及if、for、do、while、switch、case語(yǔ)句中的程序都要采用如上的縮進(jìn)方式。11、標(biāo)識(shí)符和操作符之間加適當(dāng)?shù)目崭?,使代碼錯(cuò)落有致,容易閱讀。一元運(yùn)算符(+、-、求址符&、求值符*、求非值符!、求反值符、表示正負(fù)的+、-等)緊貼操作數(shù),不加空格;二元運(yùn)算符(算術(shù)運(yùn)算符+、-、*、/、%、位運(yùn)算符&、|、移位符、賦值符+=、-=、*=、/=、%=、&=、|=、=、=、比較符&、|等)與前后的操作數(shù)之間各保留一個(gè)空格;逗號(hào)、分號(hào)緊跟前面的標(biāo)識(shí)符,后面保留一個(gè)空格;類、結(jié)構(gòu)成員訪問(wèn)符.、-等前后不加空格;聲明函數(shù)和單個(gè)變量時(shí),類型修飾符&和*靠近類型名,與函數(shù)名或變量名之間留一個(gè)空格;在一條語(yǔ)句中聲明多個(gè)變量時(shí),類型修飾符&和*靠近變量名,避免閱讀代碼時(shí)產(chǎn)生誤解。12、修改代碼時(shí)排版風(fēng)格應(yīng)與原代碼風(fēng)格保持一致,或者徹底修改整份代碼的風(fēng)格(代碼基線后不提倡這樣大改)。三注釋1、源程序有效注釋量必須在20%以上。注釋應(yīng)盡量采用C+的注釋風(fēng)格,即使用/ 注釋。2、在代碼的邏輯含義的層次上進(jìn)行注釋。注釋總是加在程序的需要一個(gè)概括性說(shuō)明或不易理解或易理解錯(cuò)的地方。注釋語(yǔ)言應(yīng)該簡(jiǎn)練、易懂而又含義準(zhǔn)確,避免二義性;所采用的語(yǔ)種首選是中文,如有輸入困難、編譯環(huán)境限制或特殊需求也可采用英文。3、注釋應(yīng)與其描述的代碼相近,對(duì)代碼的注釋應(yīng)放在其上方或右方(針對(duì)單條語(yǔ)句的注釋)相鄰位置,不可放在下方,避免在一行代碼或表達(dá)式中間使用注釋,如放于上方則需與其上面的代碼用空行隔開(kāi)(較緊湊的代碼除外)。4、正確命名變量、結(jié)構(gòu)、函數(shù)、過(guò)程以及合理地組織代碼地結(jié)構(gòu),使代碼成為自注釋的,可減少不必要的注釋。5、數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)域的注釋放在此域的右方。6、在常量名字(或有宏機(jī)制的語(yǔ)言中的宏)聲明后應(yīng)對(duì)該名字作適當(dāng)注釋,注釋說(shuō)明的要點(diǎn)是:被保存值的含義(必須);合法取值的范圍(可選)。7、函數(shù)注釋包括:函數(shù)功能描述(必須,除非函數(shù)非常簡(jiǎn)單明了),輸入、輸出等,復(fù)雜的函數(shù)需要加上變量用途說(shuō)明。8、說(shuō)明文件(.h、.inc、.def、.cfg等)頭部應(yīng)進(jìn)行注釋,注釋內(nèi)容包括:作者名稱、創(chuàng)建時(shí)間、模塊用途等,復(fù)雜的算法需要加上流程說(shuō)明,與其他文件有密切依賴關(guān)系的要進(jìn)行說(shuō)明。9、程序中注釋包括:修改時(shí)間和作者、方便理解的注釋等。10、當(dāng)if、for等語(yǔ)句后的代碼塊比較長(zhǎng),特別是有多重嵌套時(shí),應(yīng)當(dāng)在一些段落結(jié)束處的符號(hào)后加注釋,簡(jiǎn)單標(biāo)明其對(duì)應(yīng)起始位置,例如/ end of if (.) 、/ end of while (.),以便閱讀。11、邊寫代碼邊注釋。代碼比較復(fù)雜時(shí),先寫注釋標(biāo)識(shí)出程序的處理過(guò)程,然后再對(duì)每一個(gè)邏輯處理過(guò)程進(jìn)行語(yǔ)句書寫。修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。四標(biāo)識(shí)符命名1、標(biāo)識(shí)符的命名要清晰、明了,有明確含義,同時(shí)使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。命名中使用特殊約定或縮寫時(shí),要有注釋說(shuō)明。2、命名規(guī)范必須與所使用的系統(tǒng)風(fēng)格保持一致,UNIX系統(tǒng)下采用全小寫加下劃線的形式,Windows系統(tǒng)下采用大小寫混排的形式。自己特有的命名風(fēng)格,要自始至終保持一致,不可來(lái)回變化,且首先要符合項(xiàng)目組或產(chǎn)品組的命名規(guī)則。3、對(duì)于變量命名,盡量使用完整的單詞而不是縮寫;禁止取單個(gè)字符(如i、j、k.),但i、j、k作局部循環(huán)變量、p作為指針、x、y作為坐標(biāo)變量以及在數(shù)學(xué)公式中合理使用單字符變量是允許的,建議除了要有具體含義外,還能表明其變量類型、數(shù)據(jù)類型、有效范圍等(采用匈牙利命名法或簡(jiǎn)化的匈牙利命名法)。靜態(tài)變量要加前綴s_(表示static),全局變量要加前綴g_(表示global),類的數(shù)據(jù)成員要加前綴m_(表示member),常量要加前綴c_(表示const)或使用全大寫加下劃線的形式。4、應(yīng)盡量使用const定義常量而不使用宏定義常量。5、程序中不要使用僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符;也不要使用標(biāo)識(shí)符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會(huì)發(fā)生語(yǔ)法錯(cuò)誤,但容易使人誤解。6、復(fù)用一個(gè)變量時(shí)不要出于不同的目的,因?yàn)檫@樣容易把讀代碼的人搞糊涂。7、變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”。全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞”、“動(dòng)詞名詞”或者“動(dòng)詞副詞(動(dòng)詞短語(yǔ))”的形式。類的成員函數(shù)(如果可以的話)應(yīng)當(dāng)只使用“動(dòng)詞”,被省略掉的名詞就是類本身。8、用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。常用反義詞組有: add/delete, add/remove, begin/end, create/destroy, cut/paste, first/last, get/put, get/set, increase/decrease, increment/decrement, insert/delete, insert/remove, lock/unlock, min/max, old/new, open/close, previous/next, save/load, send/receive, set/unset, show/hide, source/destination, source/target, start/finish, start/stop, up/down。9、在Windows系統(tǒng)下編程時(shí),類名、結(jié)構(gòu)名用首字母大寫的單詞組合而成,結(jié)構(gòu)名也可以用全大寫單詞加下劃線分隔組成。類名以大寫字母C為前綴,結(jié)構(gòu)名以Stru為后綴,以區(qū)分函數(shù)名;全大寫單詞加下劃線的結(jié)構(gòu)名要以_STRU為后綴(或使用其他能體現(xiàn)結(jié)構(gòu)含義的前/后綴),以區(qū)分全大寫單詞加下劃線組成的常量名;函數(shù)名用首字母大寫的單詞組合而成。五可讀性1、避免使用不易理解的數(shù)字,用有意義的宏或常量標(biāo)識(shí)符來(lái)替代。涉及物理狀態(tài)或者含有物理意義的常量必須用有意義的枚舉或宏來(lái)代替。被多處使用的數(shù)字應(yīng)替換為宏以便修改。2、注意運(yùn)算符的優(yōu)先級(jí),表達(dá)式比較復(fù)雜時(shí)用括號(hào)明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級(jí)讓閱讀者容易產(chǎn)生誤解。3、程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰,結(jié)構(gòu)成員賦值代碼不應(yīng)被其它代碼隔開(kāi)。不要使用難懂的技巧性很高的語(yǔ)句,除非很有必要。六變量、結(jié)構(gòu)1、去掉沒(méi)有必要的公共變量以降低模塊間的耦合度。定義公共變量時(shí),應(yīng)對(duì)其含義、作用、取值范圍進(jìn)行注釋說(shuō)明,若有必要還應(yīng)說(shuō)明與其它變量的關(guān)系。明確公共變量與操作此變量的函數(shù)或過(guò)程的關(guān)系,如:被哪個(gè)函數(shù)訪問(wèn)、修改等。對(duì)公共變量賦值應(yīng)避免不合理的值或數(shù)組下標(biāo)越界。避免局部變量與公共變量同名。2、嚴(yán)禁使用未經(jīng)初始化的變量作為右值,為避免不同的編譯器在變量初始化上的差異,對(duì)變量,尤其是指針,在使用前將其初始化,盡可能在定義變量的同時(shí)初始化該變量(就近原則)。3、使用可移植的數(shù)據(jù)類型,盡量不要使用與具體硬件或軟件環(huán)境關(guān)系密切的變量。4、結(jié)構(gòu)的功能要單一,是針對(duì)一種事務(wù)的抽象。說(shuō)明:設(shè)計(jì)結(jié)構(gòu)時(shí)應(yīng)力爭(zhēng)使結(jié)構(gòu)代表一種現(xiàn)實(shí)事務(wù)的抽象,而不是同時(shí)代表多種。結(jié)構(gòu)中的各元素應(yīng)代表同一事務(wù)的不同側(cè)面,而不應(yīng)把描述沒(méi)有關(guān)系或關(guān)系很弱的不同事務(wù)的元素放到同一結(jié)構(gòu)中。如果兩個(gè)結(jié)構(gòu)間關(guān)系比較復(fù)雜、密切,應(yīng)將它們合并為一個(gè)結(jié)構(gòu)。5、結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中。若結(jié)構(gòu)中元素個(gè)數(shù)過(guò)多可考慮依據(jù)某種原則把元素組成不同的子結(jié)構(gòu),以減少原結(jié)構(gòu)中元素的個(gè)數(shù)。6、仔細(xì)設(shè)計(jì)結(jié)構(gòu)中元素的布局與排列順序,使結(jié)構(gòu)容易理解、節(jié)省占用空間(針對(duì)位域),并減少引起誤用現(xiàn)象??紤]存取效率,結(jié)構(gòu)元素盡量位于字節(jié)對(duì)齊的位置上,例如32位機(jī)上,如果結(jié)構(gòu)成員在4字節(jié)倍數(shù)的位置上,CPU一個(gè)指令就可以存取,否則要耗費(fèi)更多的CPU指令。7、結(jié)構(gòu)的設(shè)計(jì)要盡量考慮向前兼容和以后的版本升級(jí),并為某些未來(lái)可能的應(yīng)用保留余地(如預(yù)留一些空間等)。8、對(duì)自定義數(shù)據(jù)類型進(jìn)行恰當(dāng)命名,使它成為自描述性的,以提高代碼可讀性。注意其命名方式在同一產(chǎn)品中的統(tǒng)一。9、當(dāng)聲明用于分布式環(huán)境或不同CPU間通信環(huán)境的數(shù)據(jù)結(jié)構(gòu)時(shí),必須考慮機(jī)器的字節(jié)順序、使用的位域及字節(jié)對(duì)齊等問(wèn)題。10、定義結(jié)構(gòu)體成員變量應(yīng)盡量使用基本的數(shù)據(jù)類型,如果使用結(jié)構(gòu)體、類或指針為成員變量,應(yīng)定義執(zhí)行初始化的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和重載賦值操作符。聲明不能自行初始化的結(jié)構(gòu)或類的變量時(shí),應(yīng)及時(shí)初始化該變量。11、定義以行為為主的類時(shí),將public函數(shù)、方法聲明寫在前面,將private數(shù)據(jù)聲明寫在后面;定義以數(shù)據(jù)為主的結(jié)構(gòu)體時(shí),將數(shù)據(jù)聲明寫在前面,將輔助函數(shù)(執(zhí)行初始化的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、賦值函數(shù)等)寫在后面。12、在類和結(jié)構(gòu)聲明中,復(fù)用public、protected、private關(guān)鍵字,將函數(shù)聲明和成員變量聲明分開(kāi)。七函數(shù)、過(guò)程1、對(duì)所調(diào)用函數(shù)的錯(cuò)誤返回碼要仔細(xì)、全面地處理。2、編寫可重入函數(shù)時(shí),應(yīng)注意局部變量的使用(例如編寫C/C+語(yǔ)言的可重入函數(shù)時(shí),應(yīng)使用auto即缺省態(tài)局部變量或寄存器變量)。說(shuō)明:編寫C/C+語(yǔ)言的可重入函數(shù)時(shí),不應(yīng)使用static局部變量,否則必須經(jīng)過(guò)特殊處理,才能使函數(shù)具有可重入性。3、編寫可重入函數(shù)時(shí),若使用全局變量,則應(yīng)通過(guò)設(shè)置互斥量、關(guān)中斷、信號(hào)量(即P、V操作)等手段對(duì)其加以保護(hù)。4、在同一項(xiàng)目組應(yīng)明確規(guī)定對(duì)接口函數(shù)參數(shù)的合法性檢查應(yīng)由函數(shù)的調(diào)用者負(fù)責(zé)還是由接口函數(shù)本身負(fù)責(zé),缺省是由函數(shù)調(diào)用者負(fù)責(zé)。說(shuō)明:對(duì)于模塊間接口函數(shù)的參數(shù)的合法性檢查這一問(wèn)題,往往有兩個(gè)極端現(xiàn)象,要么是調(diào)用者和被調(diào)用者對(duì)參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這一必要的處理過(guò)程,造成問(wèn)題隱患;要么就是調(diào)用者和被調(diào)用者均對(duì)參數(shù)進(jìn)行合法性檢查,這種情況雖不會(huì)造成問(wèn)題,但產(chǎn)生了冗余代碼,降低了效率。5、函數(shù)的規(guī)模盡量限制在200行以內(nèi),一個(gè)函數(shù)僅完成一件功能,為簡(jiǎn)單功能編寫函數(shù),不要設(shè)計(jì)多用途面面俱到的函數(shù)。6、函數(shù)的功能應(yīng)該是可以預(yù)測(cè)的,也就是只要輸入的數(shù)據(jù)相同就應(yīng)產(chǎn)生同樣的輸出。7、如果多段代碼重復(fù)做同一件事情,應(yīng)考慮函數(shù)重構(gòu)。8、設(shè)計(jì)高扇入、合理扇出(小于7)的函數(shù),改進(jìn)模塊中函數(shù)的結(jié)構(gòu),降低函數(shù)間的耦合度,并提高函數(shù)的獨(dú)立性以及代碼可讀性、效率和可維護(hù)性。9、在多任務(wù)操作系統(tǒng)的環(huán)境下編程,要注意函數(shù)可重入性的考慮。10、為了防止頭文件被重復(fù)包含,應(yīng)當(dāng)用#include guards(#ifndef xx_h / #define xx_h / #endif)結(jié)構(gòu)產(chǎn)生預(yù)處理塊。#include應(yīng)一律出現(xiàn)在文件開(kāi)頭, 如果是頭文件則放在#include guards之后。盡量避免頭文件對(duì)頭文件的依賴,如果某個(gè)頭文件中需要用到某個(gè)類的引用或指針,那么只需要一個(gè)forward declaration(例如class CMyClass;)就足夠了。源程序應(yīng)該首先#include對(duì)應(yīng)的頭文件 確保每個(gè)頭文件都可以單獨(dú)被include,而不需要額外的頭文件依賴。11、使用宏定義表達(dá)式時(shí),要使用完備的括號(hào)。將宏定義的多條表達(dá)式放在大括號(hào)中,避免if、for等語(yǔ)句書寫不規(guī)范造成代碼漏執(zhí)行。使用宏時(shí),避免執(zhí)行使參數(shù)值發(fā)生變化的操作,例如增1操作。12、在主要的函數(shù)和過(guò)程的入口、出口及大的分支記錄最低級(jí)別(DEBUGGING)的調(diào)試日志;在模塊間互發(fā)消息時(shí),發(fā)送方和接受方都要記錄信息級(jí)別(INFORMATION)的日志;在調(diào)用系統(tǒng)函數(shù)發(fā)生錯(cuò)誤處記錄錯(cuò)誤級(jí)別(ERROR)的日志;在與程序性能關(guān)系密切的函數(shù)調(diào)用處記錄性能日志;進(jìn)行多線程編程時(shí)在日志中記錄線程ID以便定位錯(cuò)誤。八可測(cè)性1、在同一項(xiàng)目組或產(chǎn)品組內(nèi),調(diào)測(cè)打印出的信息串的格式要有統(tǒng)一的形式。信息串中至少要有所在模塊名(或源文件名)及行號(hào)。2、使用斷言來(lái)發(fā)現(xiàn)軟件問(wèn)題,提高代碼可測(cè)性,用斷言確認(rèn)函數(shù)的參數(shù)的有效性。九質(zhì)量保證1、代碼質(zhì)量保證優(yōu)先原則:1)正確性

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論