軟件編程規(guī)范總結.doc_第1頁
軟件編程規(guī)范總結.doc_第2頁
軟件編程規(guī)范總結.doc_第3頁
軟件編程規(guī)范總結.doc_第4頁
軟件編程規(guī)范總結.doc_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔軟件編程規(guī)范總結本規(guī)范的內容包括:基本原則、布局、注釋、命名規(guī)則、變量常量與類型、表達式與語句、函數與過程、可靠性、可測性、斷言與錯誤處理等。1、 基本原則1. 保持代碼的簡明清晰,避免過分的編程技巧。2. 所有的代碼盡量遵循ANSI C標準。3. 編程時首先達到正確性,其次考慮效率。4. 避免或少用全局變量。5. 盡量避免使用GOTO語句。6. 盡可能重用、修正老的代碼。7. 盡量減少同樣的錯誤出現(xiàn)的次數。2、 文件布局1. 頭文件必須要避免重復包含。2. 包含標準庫頭文件用尖括號 ,包含非標準庫頭文件用雙引號 “ ”。3. 遵循統(tǒng)一的順序書寫類的定義及實現(xiàn)。類的定義(在定義文件中)按如下順序書寫: 公有屬性 公有函數 保護屬性 保護函數 私有屬性 私有函數類的實現(xiàn)(在實現(xiàn)文件中)按如下順序書寫: 構造函數析構函數公有函數保護函數私有函數4. 程序中一行的代碼和注釋不能超過80列。5. 定義指針類型的變量,*應放在變量前。6. 源程序中關系較為緊密的代碼應盡可能相鄰。iLength= 10;iWidth= 5; / 矩形的長與寬關系較密切,放在一起。StrCaption= “Test”;7. 禁止使用TAB鍵,必須使用空格進行縮進。縮進為4個空格。8. 程序的分界符和應獨占一行并且位于同一列,同時與引用它們的語句左對齊。 之內的代碼塊使用縮進規(guī)則對齊。9. if、else、else if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加 。if (varible1 ”這類操作符前后不加空格。17. 多元運算符和它們的操作數之間至少需要一個空格。18. 關鍵字之后要留空格。(if、for、while等關鍵字之后應留一個空格再跟左括號(,以突出關鍵字。)19. 函數名之后不要留空格。(函數名后緊跟左括號(,以與關鍵字區(qū)別。)20. (向后緊跟,)、,、;向前緊跟,緊跟處不留空格。,之后要留空格。;不是行結束符號時其后要留空格。21. 長表達式(超過80列)要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊。22. 函數聲明時,類型與名稱不允許分行書寫。3、 注釋1. 一般情況下,源程序有效注釋量必須在20以上。2. 注釋符與注釋內容之間要用一個空格進行分隔。3. 文件頭部必須進行注釋,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、編譯說明文件.cfg等。4. 函數頭部應進行注釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、訪問和修改的表、修改信息等。5. 包含在 中代碼塊的結束處應加注釋,便于閱讀。特別是多分支、多重嵌套的條件語句或循環(huán)語句。void Main()if () while () /* end of while () */ / 指明該條while語句結束 /* end of if () */ / 指明是哪條語句結束 /* end of void main()*/ / 指明函數的結束6. 保證代碼和注釋的一致性。修改代碼同時修改相應的注釋,不再有用的注釋要刪除。7. 注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。8. 全局變量要有詳細的注釋,包括對其功能、取值范圍、訪問信息及訪問時注意事項等的說明。9. 注釋與所描述內容進行同樣的縮排。10. 對分支語句(條件分支、循環(huán)語句等)必須編寫注釋。11. 盡量避免在注釋中使用縮寫,特別是不常用縮寫。4、 命名規(guī)則1. 標識符要采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語拼音來命名。嚴格禁止使用連續(xù)的下劃線,下劃線也不能出現(xiàn)在標識符頭或結尾(預編譯開關除外)。2. 程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標識符。3. 用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等。4. 宏、常量名都要使用大寫字母, 用下劃線 _ 分割單詞。預編譯開關的定義使用下劃線 _ 開始。5. 變量名長度應小于31個字符,以保持與ANSI C標準一致。不得取單個字符(如i、j、k等)作為變量名,但是局部循環(huán)變量除外。6. 程序中局部變量不要與全局變量重名。7. 使用一致的前綴來區(qū)分變量的作用域。g_ : 全局變量 s_ : 模塊內靜態(tài)變量 空 : 局部變量不加范圍前綴8. 使用一致的小寫類型指示符作為前綴來區(qū)分變量的類型。說明:常用變量類型前綴列表如下:i : intf : floatd: doublec : charuc : unsigned char 或 BYTEl : longp : pointerb : BOOLh : HANDLEw : unsigned short 或 WORDdw : DWORD或 unsigned longa : 數組,array of TYPEstr : 字符串t: 結構類型9. 完整的變量名應由前綴+變量名主體組成,變量名的主體應當使用“名詞”或者“形容詞名詞”,且首字母必須大寫。float g_fValue;10. 函數名用大寫字母開頭的單詞組合而成,且應當使用“動詞”或者“動詞名詞”(動賓詞組)。11. 結構名、聯(lián)合名、枚舉名由前綴T_ 開頭。事件名由前綴EV_ 開頭。12. 標識符前最好不加項目、產品、部門的標識。5、 變量常量與類型1. 定義全局變量時必須仔細分析,明確其含義、作用、取值范圍及與其它全局變量間的關系。2. 明確全局變量與操作此全局變量的函數或過程的關系。3. 一個變量有且只有一個功能,不能把一個變量用作多種用途。4. 循環(huán)語句與判斷語句中,不允許對其它變量進行計算與賦值。5. 宏定義中如果包含表達式或變量,表達式和變量必須用小括號括起來。6. 使用宏定義多行語句時, 必須使用 把這些語句括起來。建議:l 盡量構造僅有一個模塊或函數可以修改、創(chuàng)建的全局變量,而其余有關模塊或函數只能訪問。l 對于全局變量通過統(tǒng)一的函數訪問。l 盡量使用const說明常量數據,對于宏定義的常數,必須指出其類型。l 最好不要在語句塊內聲明局部變量。7. 結構和聯(lián)合必須被類型化。typedef struct char acNameNAME_SIZE;WORD wScore; T_Student;T_Student *ptStudent;建議:l 使用嚴格形式定義的、可移植的數據類型,盡量不要使用與具體硬件或軟件環(huán)境關系密切的變量。l 結構是針對一種事務的抽象,功能要單一,不要設計面面俱到的數據結構。l 不同結構間的關系要盡量簡單,若兩個結構間關系較復雜、密切,那么應合為一個結構。l 結構中元素的個數應適中。若結構中元素個數過多可考慮依據某種原則把元素組成不同的子結構,以減少原結構中元素的個數。l 仔細設計結構中元素的布局與排列順序,使結構容易理解、節(jié)省占用空間,并減少引起誤用現(xiàn)象,對于結構中未用的位明確地給予保留。l 結構的設計要盡量考慮向前兼容和以后的版本升級,并為某些未來可能的應用保留余地(如預留一些空間等)。l 合理地設計數據并使用自定義數據類型,盡量減少沒有必要的數據類型默認轉換與強制轉換。l 當聲明數據結構時,必須考慮機器的字節(jié)順序、使用的位域及字節(jié)對齊等問題 。6、 表達式與語句1. 在表達式中使用括號,使表達式的運算順序更清晰。if (iYear % 4 = 0) & (iYear % 100 != 0) | (iYear % 400 = 0)2. 避免表達式中的附加功能,不要編寫太復雜的復合表達式。3. 不可將浮點變量用“=”或“!=”與任何數字比較。4. 應當將指針變量用“=”或“!=”與NULL比較。5. 在switch語句中,每一個case分支必須使用break結尾,最后一個分支必須是default分支。6. 不可在for 循環(huán)體內修改循環(huán)變量,防止for 循環(huán)失去控制。建議:l 循環(huán)嵌套次數不大于3次。l do while語句和while語句僅使用一個條件。l 當switch語句的分支比較多時,采用數據驅動方式。如果循環(huán)體內存在邏輯判斷,并且循環(huán)次數很大,宜將邏輯判斷移到循環(huán)體的外面。l for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。l 在進行“=”比較時,將常量或常數放在“=”號的左邊。7、 參數1. 如果函數沒有參數,則用void填充。void SetValue(int iWidth, int iHeight);float GetValue(void);2. 如果參數是指針,且僅作輸入用,則應在類型前加const。(防止該指針在函數體內被意外修改。)3. 當結構變量作為參數時,應傳送結構的指針而不傳送整個結構體,并且不得修改結構中的元素,用作輸出時除外。4. 不要省略返回值的類型,如果函數沒有返回值,那么應聲明為void類型。5. 對于有返回值的函數,每一個分支都必須有返回值。(為了保證對被調用函數返回值的判斷,有返回值的函數中的每一個退出點都需要有返回值)6. 對輸入參數的正確性和有效性進行檢查。7. 防止將函數的參數作為工作變量。void SumData(int iNum, int *piData, int *piSum ) int iCount ; int iSumTmp; / 存儲“和”的臨時變量 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. 必須對所調用函數的錯誤返回值進行處理。(函數返回錯誤,往往是因為輸入的參數不合法,或者此時系統(tǒng)已經出現(xiàn)了異常。如果不對錯誤返回值進行必要的處理,會導致錯誤的擴大,甚至導致系統(tǒng)的崩潰。)8、 可靠性1. 在程序編制之前,必須了解編譯系統(tǒng)的內存分配方式,特別是編譯系統(tǒng)對不同類型的變量的內存分配規(guī)則,如局部變量在何處分配、靜態(tài)變量在何處分配等。2. 防止內存操作越界。3. 必須對動態(tài)申請的內存做有效性檢查,并進行初始化;動態(tài)內存的釋放必須和分配成對以防止內存泄漏,釋放后內存指針置為NULL。4. 變量在使用前應初始化,防止未經初始化的變量被引用。5. 指針類型變量必須初始化為NULL。6. 指針不要進行復雜的邏輯或算術操作。7. 如果指針類型明確不會改變,應該強制為const類型的指針,以加強編譯器的檢查。8. 減少指針和數據類型的強制類型轉化。9. 移位操作一定要確定類型。10. 對變量進行賦值時,必須對其值進行合法性檢查,防止越界等現(xiàn)象發(fā)生。11. 類中的屬性應聲明為private,用公有的函數訪問。12. 在編寫派生類的賦值函數時,注意不要忘記對基類的成員變量重新賦值。13. 構造函數應完成簡單有效的功能,不應完成復雜的運算和大量的內存管理。14. 不要在棧中分配類的實例,也不要生成全局類實例。15. 正確處理拷貝構造函數與賦值函數。16. 過程/函數中申請的(為打開文件而使用的)文件句柄,在過程/函數退出之前要關閉,除非要把這個句柄傳遞給其它函數使用。9、 可測試性1. 在同一項目組或產品組內,為準備集成測試和系統(tǒng)聯(lián)調,要有一套統(tǒng)一的調測開關及相應信息輸出函數,并且要有詳細的說明。統(tǒng)一的調試接口和輸出函數由模塊設計和測試人員根據項目特性統(tǒng)一制訂,由項目系統(tǒng)人員統(tǒng)一納入系統(tǒng)設計中。2. 在同一個項目組或產品組內,調測打印出的信息串要有統(tǒng)一的格式。信息串中應當包含所在的模塊名(或源文件名)及行號等信息。3. 在編寫代碼之前,應預先設計好程序調試與測試的方法和手段,并設計好各種調測開關及相應測試代碼(如打印函數等)。10、 斷言與錯誤處理1. 整個軟件系統(tǒng)應該采用統(tǒng)一的斷言。如果系統(tǒng)不提供斷言,則應該自己構造一個統(tǒng)一的斷言供編程時使用。2. 使用斷言捕捉不應該發(fā)生的非法情況。不要混淆非法情況與錯誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。3. 指向指針的指針及更多級的指針必須逐級檢查。4. 對較復雜

溫馨提示

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

評論

0/150

提交評論