




已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精選文庫(kù)軟件編程規(guī)范總結(jié)本規(guī)范的內(nèi)容包括:基本原則、布局、注釋、命名規(guī)則、變量常量與類(lèi)型、表達(dá)式與語(yǔ)句、函數(shù)與過(guò)程、可靠性、可測(cè)性、斷言與錯(cuò)誤處理等。1、 基本原則1. 保持代碼的簡(jiǎn)明清晰,避免過(guò)分的編程技巧。2. 所有的代碼盡量遵循ANSI C標(biāo)準(zhǔn)。3. 編程時(shí)首先達(dá)到正確性,其次考慮效率。4. 避免或少用全局變量。5. 盡量避免使用GOTO語(yǔ)句。6. 盡可能重用、修正老的代碼。7. 盡量減少同樣的錯(cuò)誤出現(xiàn)的次數(shù)。2、 文件布局1. 頭文件必須要避免重復(fù)包含。2. 包含標(biāo)準(zhǔn)庫(kù)頭文件用尖括號(hào) ,包含非標(biāo)準(zhǔn)庫(kù)頭文件用雙引號(hào) “ ”。3. 遵循統(tǒng)一的順序書(shū)寫(xiě)類(lèi)的定義及實(shí)現(xiàn)。類(lèi)的定義(在定義文件中)按如下順序書(shū)寫(xiě): 公有屬性 公有函數(shù) 保護(hù)屬性 保護(hù)函數(shù) 私有屬性 私有函數(shù)類(lèi)的實(shí)現(xiàn)(在實(shí)現(xiàn)文件中)按如下順序書(shū)寫(xiě): 構(gòu)造函數(shù)析構(gòu)函數(shù)公有函數(shù)保護(hù)函數(shù)私有函數(shù)4. 程序中一行的代碼和注釋不能超過(guò)80列。5. 定義指針類(lèi)型的變量,*應(yīng)放在變量前。6. 源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。iLength= 10;iWidth= 5; / 矩形的長(zhǎng)與寬關(guān)系較密切,放在一起。StrCaption= “Test”;7. 禁止使用TAB鍵,必須使用空格進(jìn)行縮進(jìn)??s進(jìn)為4個(gè)空格。8. 程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左對(duì)齊。 之內(nèi)的代碼塊使用縮進(jìn)規(guī)則對(duì)齊。9. if、else、else if、for、while、do等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加 。if (varible1 ”這類(lèi)操作符前后不加空格。17. 多元運(yùn)算符和它們的操作數(shù)之間至少需要一個(gè)空格。18. 關(guān)鍵字之后要留空格。(if、for、while等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)(,以突出關(guān)鍵字。)19. 函數(shù)名之后不要留空格。(函數(shù)名后緊跟左括號(hào)(,以與關(guān)鍵字區(qū)別。)20. (向后緊跟,)、,、;向前緊跟,緊跟處不留空格。,之后要留空格。;不是行結(jié)束符號(hào)時(shí)其后要留空格。21. 長(zhǎng)表達(dá)式(超過(guò)80列)要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊。22. 函數(shù)聲明時(shí),類(lèi)型與名稱(chēng)不允許分行書(shū)寫(xiě)。3、 注釋1. 一般情況下,源程序有效注釋量必須在20以上。2. 注釋符與注釋內(nèi)容之間要用一個(gè)空格進(jìn)行分隔。3. 文件頭部必須進(jìn)行注釋?zhuān)ǎ?h文件、.c文件、.cpp文件、.inc文件、.def文件、編譯說(shuō)明文件.cfg等。4. 函數(shù)頭部應(yīng)進(jìn)行注釋?zhuān)谐觯汉瘮?shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、返回值、訪問(wèn)和修改的表、修改信息等。5. 包含在 中代碼塊的結(jié)束處應(yīng)加注釋?zhuān)阌陂喿x。特別是多分支、多重嵌套的條件語(yǔ)句或循環(huán)語(yǔ)句。void Main()if () while () /* end of while () */ / 指明該條while語(yǔ)句結(jié)束 /* end of if () */ / 指明是哪條語(yǔ)句結(jié)束 /* end of void main()*/ / 指明函數(shù)的結(jié)束6. 保證代碼和注釋的一致性。修改代碼同時(shí)修改相應(yīng)的注釋?zhuān)辉儆杏玫淖⑨屢獎(jiǎng)h除。7. 注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方或右方(對(duì)單條語(yǔ)句的注釋?zhuān)┫噜徫恢?,不可放在下面,如放于上方則需與其上面的代碼用空行隔開(kāi)。8. 全局變量要有詳細(xì)的注釋?zhuān)▽?duì)其功能、取值范圍、訪問(wèn)信息及訪問(wèn)時(shí)注意事項(xiàng)等的說(shuō)明。9. 注釋與所描述內(nèi)容進(jìn)行同樣的縮排。10. 對(duì)分支語(yǔ)句(條件分支、循環(huán)語(yǔ)句等)必須編寫(xiě)注釋。11. 盡量避免在注釋中使用縮寫(xiě),特別是不常用縮寫(xiě)。4、 命名規(guī)則1. 標(biāo)識(shí)符要采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語(yǔ)拼音來(lái)命名。嚴(yán)格禁止使用連續(xù)的下劃線,下劃線也不能出現(xiàn)在標(biāo)識(shí)符頭或結(jié)尾(預(yù)編譯開(kāi)關(guān)除外)。2. 程序中不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符。3. 用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。4. 宏、常量名都要使用大寫(xiě)字母, 用下劃線 _ 分割單詞。預(yù)編譯開(kāi)關(guān)的定義使用下劃線 _ 開(kāi)始。5. 變量名長(zhǎng)度應(yīng)小于31個(gè)字符,以保持與ANSI C標(biāo)準(zhǔn)一致。不得取單個(gè)字符(如i、j、k等)作為變量名,但是局部循環(huán)變量除外。6. 程序中局部變量不要與全局變量重名。7. 使用一致的前綴來(lái)區(qū)分變量的作用域。g_ : 全局變量 s_ : 模塊內(nèi)靜態(tài)變量 空 : 局部變量不加范圍前綴8. 使用一致的小寫(xiě)類(lèi)型指示符作為前綴來(lái)區(qū)分變量的類(lèi)型。說(shuō)明:常用變量類(lèi)型前綴列表如下:i : intf : floatd: doublec : charuc : unsigned char 或 BYTEl : longp : pointerb : BOOLh : HANDLEw : unsigned short 或 WORDdw : DWORD或 unsigned longa : 數(shù)組,array of TYPEstr : 字符串t: 結(jié)構(gòu)類(lèi)型9. 完整的變量名應(yīng)由前綴+變量名主體組成,變量名的主體應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”,且首字母必須大寫(xiě)。float g_fValue;10. 函數(shù)名用大寫(xiě)字母開(kāi)頭的單詞組合而成,且應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞名詞”(動(dòng)賓詞組)。11. 結(jié)構(gòu)名、聯(lián)合名、枚舉名由前綴T_ 開(kāi)頭。事件名由前綴EV_ 開(kāi)頭。12. 標(biāo)識(shí)符前最好不加項(xiàng)目、產(chǎn)品、部門(mén)的標(biāo)識(shí)。5、 變量常量與類(lèi)型1. 定義全局變量時(shí)必須仔細(xì)分析,明確其含義、作用、取值范圍及與其它全局變量間的關(guān)系。2. 明確全局變量與操作此全局變量的函數(shù)或過(guò)程的關(guān)系。3. 一個(gè)變量有且只有一個(gè)功能,不能把一個(gè)變量用作多種用途。4. 循環(huán)語(yǔ)句與判斷語(yǔ)句中,不允許對(duì)其它變量進(jìn)行計(jì)算與賦值。5. 宏定義中如果包含表達(dá)式或變量,表達(dá)式和變量必須用小括號(hào)括起來(lái)。6. 使用宏定義多行語(yǔ)句時(shí), 必須使用 把這些語(yǔ)句括起來(lái)。建議:l 盡量構(gòu)造僅有一個(gè)模塊或函數(shù)可以修改、創(chuàng)建的全局變量,而其余有關(guān)模塊或函數(shù)只能訪問(wèn)。l 對(duì)于全局變量通過(guò)統(tǒng)一的函數(shù)訪問(wèn)。l 盡量使用const說(shuō)明常量數(shù)據(jù),對(duì)于宏定義的常數(shù),必須指出其類(lèi)型。l 最好不要在語(yǔ)句塊內(nèi)聲明局部變量。7. 結(jié)構(gòu)和聯(lián)合必須被類(lèi)型化。typedef struct char acNameNAME_SIZE;WORD wScore; T_Student;T_Student *ptStudent;建議:l 使用嚴(yán)格形式定義的、可移植的數(shù)據(jù)類(lèi)型,盡量不要使用與具體硬件或軟件環(huán)境關(guān)系密切的變量。l 結(jié)構(gòu)是針對(duì)一種事務(wù)的抽象,功能要單一,不要設(shè)計(jì)面面俱到的數(shù)據(jù)結(jié)構(gòu)。l 不同結(jié)構(gòu)間的關(guān)系要盡量簡(jiǎn)單,若兩個(gè)結(jié)構(gòu)間關(guān)系較復(fù)雜、密切,那么應(yīng)合為一個(gè)結(jié)構(gòu)。l 結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中。若結(jié)構(gòu)中元素個(gè)數(shù)過(guò)多可考慮依據(jù)某種原則把元素組成不同的子結(jié)構(gòu),以減少原結(jié)構(gòu)中元素的個(gè)數(shù)。l 仔細(xì)設(shè)計(jì)結(jié)構(gòu)中元素的布局與排列順序,使結(jié)構(gòu)容易理解、節(jié)省占用空間,并減少引起誤用現(xiàn)象,對(duì)于結(jié)構(gòu)中未用的位明確地給予保留。l 結(jié)構(gòu)的設(shè)計(jì)要盡量考慮向前兼容和以后的版本升級(jí),并為某些未來(lái)可能的應(yīng)用保留余地(如預(yù)留一些空間等)。l 合理地設(shè)計(jì)數(shù)據(jù)并使用自定義數(shù)據(jù)類(lèi)型,盡量減少?zèng)]有必要的數(shù)據(jù)類(lèi)型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換。l 當(dāng)聲明數(shù)據(jù)結(jié)構(gòu)時(shí),必須考慮機(jī)器的字節(jié)順序、使用的位域及字節(jié)對(duì)齊等問(wèn)題 。6、 表達(dá)式與語(yǔ)句1. 在表達(dá)式中使用括號(hào),使表達(dá)式的運(yùn)算順序更清晰。if (iYear % 4 = 0) & (iYear % 100 != 0) | (iYear % 400 = 0)2. 避免表達(dá)式中的附加功能,不要編寫(xiě)太復(fù)雜的復(fù)合表達(dá)式。3. 不可將浮點(diǎn)變量用“=”或“!=”與任何數(shù)字比較。4. 應(yīng)當(dāng)將指針變量用“=”或“!=”與NULL比較。5. 在switch語(yǔ)句中,每一個(gè)case分支必須使用break結(jié)尾,最后一個(gè)分支必須是default分支。6. 不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止for 循環(huán)失去控制。建議:l 循環(huán)嵌套次數(shù)不大于3次。l do while語(yǔ)句和while語(yǔ)句僅使用一個(gè)條件。l 當(dāng)switch語(yǔ)句的分支比較多時(shí),采用數(shù)據(jù)驅(qū)動(dòng)方式。如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。l for語(yǔ)句的循環(huán)控制變量的取值采用“半開(kāi)半閉區(qū)間”寫(xiě)法。l 在進(jìn)行“=”比較時(shí),將常量或常數(shù)放在“=”號(hào)的左邊。7、 參數(shù)1. 如果函數(shù)沒(méi)有參數(shù),則用void填充。void SetValue(int iWidth, int iHeight);float GetValue(void);2. 如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類(lèi)型前加const。(防止該指針在函數(shù)體內(nèi)被意外修改。)3. 當(dāng)結(jié)構(gòu)變量作為參數(shù)時(shí),應(yīng)傳送結(jié)構(gòu)的指針而不傳送整個(gè)結(jié)構(gòu)體,并且不得修改結(jié)構(gòu)中的元素,用作輸出時(shí)除外。4. 不要省略返回值的類(lèi)型,如果函數(shù)沒(méi)有返回值,那么應(yīng)聲明為void類(lèi)型。5. 對(duì)于有返回值的函數(shù),每一個(gè)分支都必須有返回值。(為了保證對(duì)被調(diào)用函數(shù)返回值的判斷,有返回值的函數(shù)中的每一個(gè)退出點(diǎn)都需要有返回值)6. 對(duì)輸入?yún)?shù)的正確性和有效性進(jìn)行檢查。7. 防止將函數(shù)的參數(shù)作為工作變量。void SumData(int iNum, int *piData, int *piSum ) int iCount ; int iSumTmp; / 存儲(chǔ)“和”的臨時(shí)變量 iSumTmp = 0; for (iCount = 0; iCount iNum; iCount+) iSumTmp += piDataiCount; *piSum = iSumTmp;反例: void SumData(int iNum, int *piData, int *piSum ) int iCount; *piSum = 0; for (iCount = 0; iCount iNum; iCount+ ) *piSum += piDataiCount; / piSum成了工作變量,不好。 8. 必須對(duì)所調(diào)用函數(shù)的錯(cuò)誤返回值進(jìn)行處理。(函數(shù)返回錯(cuò)誤,往往是因?yàn)檩斎氲膮?shù)不合法,或者此時(shí)系統(tǒng)已經(jīng)出現(xiàn)了異常。如果不對(duì)錯(cuò)誤返回值進(jìn)行必要的處理,會(huì)導(dǎo)致錯(cuò)誤的擴(kuò)大,甚至導(dǎo)致系統(tǒng)的崩潰。)8、 可靠性1. 在程序編制之前,必須了解編譯系統(tǒng)的內(nèi)存分配方式,特別是編譯系統(tǒng)對(duì)不同類(lèi)型的變量的內(nèi)存分配規(guī)則,如局部變量在何處分配、靜態(tài)變量在何處分配等。2. 防止內(nèi)存操作越界。3. 必須對(duì)動(dòng)態(tài)申請(qǐng)的內(nèi)存做有效性檢查,并進(jìn)行初始化;動(dòng)態(tài)內(nèi)存的釋放必須和分配成對(duì)以防止內(nèi)存泄漏,釋放后內(nèi)存指針置為NULL。4. 變量在使用前應(yīng)初始化,防止未經(jīng)初始化的變量被引用。5. 指針類(lèi)型變量必須初始化為NULL。6. 指針不要進(jìn)行復(fù)雜的邏輯或算術(shù)操作。7. 如果指針類(lèi)型明確不會(huì)改變,應(yīng)該強(qiáng)制為const類(lèi)型的指針,以加強(qiáng)編譯器的檢查。8. 減少指針和數(shù)據(jù)類(lèi)型的強(qiáng)制類(lèi)型轉(zhuǎn)化。9. 移位操作一定要確定類(lèi)型。10. 對(duì)變量進(jìn)行賦值時(shí),必須對(duì)其值進(jìn)行合法性檢查,防止越界等現(xiàn)象發(fā)生。11. 類(lèi)中的屬性應(yīng)聲明為private,用公有的函數(shù)訪問(wèn)。12. 在編寫(xiě)派生類(lèi)的賦值函數(shù)時(shí),注意不要忘記對(duì)基類(lèi)的成員變量重新賦值。13. 構(gòu)造函數(shù)應(yīng)完成簡(jiǎn)單有效的功能,不應(yīng)完成復(fù)雜的運(yùn)算和大量的內(nèi)存管理。14. 不要在棧中分配類(lèi)的實(shí)例,也不要生成全局類(lèi)實(shí)例。15. 正確處理拷貝構(gòu)造函數(shù)與賦值函數(shù)。16. 過(guò)程/函數(shù)中申請(qǐng)的(為打開(kāi)文件而使用的)文件句柄,在過(guò)程/函數(shù)退出之前要關(guān)閉,除非要把這個(gè)句柄傳遞給其它函數(shù)使用。9、 可測(cè)試性1. 在同一項(xiàng)目組或產(chǎn)品組內(nèi),為準(zhǔn)備集成測(cè)試和系統(tǒng)聯(lián)調(diào),要有一套統(tǒng)一的調(diào)測(cè)開(kāi)關(guān)及相應(yīng)信息輸出函數(shù),并且要有詳細(xì)的說(shuō)明。統(tǒng)一的調(diào)試接口和輸出函數(shù)由模塊設(shè)計(jì)和測(cè)試人員根據(jù)項(xiàng)目特性統(tǒng)一制訂,由項(xiàng)目系統(tǒng)人員統(tǒng)一納入系統(tǒng)設(shè)計(jì)中。2. 在同一個(gè)項(xiàng)目組或產(chǎn)品組內(nèi),調(diào)測(cè)打印出的信息串要有統(tǒng)一的格式。信息串中應(yīng)當(dāng)包含所在的模塊名(或源文件名)及行號(hào)等信息。3. 在編寫(xiě)代碼之前,應(yīng)預(yù)先設(shè)計(jì)好程序調(diào)試與測(cè)試的方法和手段,并設(shè)計(jì)好各種調(diào)測(cè)開(kāi)關(guān)及相應(yīng)測(cè)試代碼(如打印函數(shù)等)。10、 斷言與錯(cuò)誤處理1. 整個(gè)軟件系統(tǒng)應(yīng)該采用統(tǒng)一的斷言。如果系統(tǒng)不提供斷言,則應(yīng)該自己構(gòu)造一個(gè)統(tǒng)一的斷言供編程時(shí)使用。2. 使用斷言捕捉不應(yīng)該發(fā)生的非法情況。不要混淆非法情況與錯(cuò)誤情況之間的區(qū)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025ABB電動(dòng)升降服務(wù)車(chē)
- 平行縫焊機(jī)行業(yè)分析:光電器件是最大的下游領(lǐng)域占有33%份額
- 房地產(chǎn)行業(yè)中期策略:企穩(wěn)中謀轉(zhuǎn)型
- 社群經(jīng)濟(jì)賦能女性跨境出??沙掷m(xù)發(fā)展白皮書(shū)
- 2025年食品冷鏈物流溫控技術(shù)與冷鏈物流企業(yè)員工培訓(xùn)體系報(bào)告
- 2025年互聯(lián)網(wǎng)醫(yī)療平臺(tái)在線問(wèn)診平臺(tái)與醫(yī)療機(jī)構(gòu)合作案例研究報(bào)告
- 電商行業(yè)2025年知識(shí)產(chǎn)權(quán)保護(hù)與網(wǎng)絡(luò)版權(quán)保護(hù)法律咨詢(xún)報(bào)告
- 普惠金融背景下2025年金融科技應(yīng)用對(duì)農(nóng)村金融服務(wù)能力提升報(bào)告
- 鋼鐵產(chǎn)業(yè)綠色轉(zhuǎn)型路徑與2025年產(chǎn)能優(yōu)化布局分析報(bào)告
- 農(nóng)村土地流轉(zhuǎn)規(guī)范化管理對(duì)農(nóng)業(yè)生產(chǎn)效率提升報(bào)告
- 變電站二次系統(tǒng)介紹(大唐)
- 《流行性感冒辨證論治》課件
- JJG(交通) 208-2024 車(chē)貨外廓尺寸動(dòng)態(tài)現(xiàn)場(chǎng)檢測(cè)設(shè)備
- 2024年山西焦煤集團(tuán)招聘考試真題
- 工廠精細(xì)化管理全案
- 鍍鋁技能考試試題及答案
- 車(chē)間工藝報(bào)警管理制度
- 天津公務(wù)員考試真題2024
- 重點(diǎn)人口管理工作規(guī)定
- 腎挫傷患者護(hù)理查房
- 山東省煙臺(tái)市、龍口市2025屆中考生物考試模擬沖刺卷含解析
評(píng)論
0/150
提交評(píng)論