編碼規則是程式編碼所要遵循的規則,要注意代碼的正確性、穩定性、可讀性。要避免使用不易理解的數字,用有意義的標識來替代,不要使用難懂的技巧性很高的語句。源程式中關係較為緊密的代碼應儘可能相鄰。
基本介紹
- 中文名:編碼規則
- 測試:代碼版本升級要經過嚴格測試。
- 注意:代碼正確性、穩定性、可讀性
- 命名:使用匈牙利表示法
排版
2.相對獨立的程式塊與塊之間加空行
3.較長的語句、表達式等要分成多行書寫。
4.劃分出的新行要進行適應的縮進,使排版整齊,語句可讀。
5.長表達式要在低優先權操作符處劃分新行,操作符放在新行之首。
6.循環、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分。
7.若函式或過程中的參數較長,則要進行適當的劃分。
8.不允許把多個短語句寫在一行中,即一行只寫一條語句。
9.函式或過程的開始、結構的定義及循環、判斷等語句中的代碼都要採用縮進風格。
10.C/C++語言是用大括弧‘{ ’和‘ }’界定一段程式塊的,編寫程式塊時‘{ ’和 ‘ }’應各獨占一行並且位於同一列,同時與引用它們的語句左對齊。在函式體 的開始、類的定義、結構的定義、枚舉的定義以及if、for、do、while、 switch、case語句中的程式都要採用如上的縮進方式。
注釋
2.邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。
3.在必要的地方注釋,注釋量要適中。注釋的內容要清楚、明了,含義準確,防止 注釋二義性。保持注釋與其描述的代碼相鄰,即注釋的就近原則。
4.對代碼的注釋應放在其上方相鄰位置,不可放在下面。
5.對數據結構的注釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋應放在此域的右方;同一結構中不同域的注釋要對齊。
6.變數、常量的注釋應放在其上方相鄰位置或右方。
7.全局變數要有較詳細的注釋,包括對其功能、取值範圍、哪些函式或過程存取它以及存取時注意事項等的說明。
8.在每個源檔案的頭部要有必要的注釋信息,包括:檔案名稱;版本號;作者;生成日期;模組功能描述(如功能、主要算法、內部各部分之間的關係、該檔案與其它檔案關係等);主要函式或過程清單及本檔案歷史修改記錄等。
9.在每個函式或過程的前面要有必要的注釋信息,包括:函式或過程名稱;功能描 述;輸入、輸出及返回值說明;調用關係及被調用關係說明等。
命名
2.較長的單詞可取單詞的頭幾發符的優先權,並用括弧明確表達式的操作順序,避免使用默認優先權。
可讀性
2.不要使用難懂的技巧性很高的語句。
3.源程式中關係較為緊密的代碼應儘可能相鄰。
變數
2.構造僅有一個模組或函式可以修改、創建,而其餘有關模組或函式只訪問的公共變數,防止多個不同模組或函式都可以修改、創建同一公共變數的現象。
3.仔細定義並明確公共變數的含義、作用、取值範圍及公共變數間的關係。
4.明確公共變數與操作此公共變數的函式或過程的關係,如訪問、修改及創建等。
5.當向公共變數傳遞數據時,要十分小心,防止賦與不合理的值或越界等現象發生。
6.防止局部變數與公共變數同名。
7.仔細設計結構中元素的布局與排列順序,使結構容易理解、節省占用空間,並減少引起誤用現象。
8.結構的設計要儘量考慮向前兼容和以後的版本升級,並為某些未來可能的套用保留餘地(如預留一些空間等)。
9.留心具體語言及編譯器處理不同數據類型的原則及有關細節。
10.嚴禁使用未經初始化的變數。聲明變數的同時對變數進行初始化。
11.編程時,要注意數據類型的強制轉換。
函式過程
2.一個函式最好僅完成一件功能。
3.為簡單功能編寫函式。
4.函式的功能應該是可以預測的,也就是只要輸入數據相同就應產生同樣的輸出。
5.儘量不要編寫依賴於其他函式內部實現的函式。
6.避免設計多參數函式,不使用的參數從接口中去掉。
7.用注釋詳細說明每個參數的作用、取值範圍及參數間的關係。
8.檢查函式所有參數輸入的有效性。
9.檢查函式所有非參數輸入的有效性,如數據檔案、公共變數等。
10.函式名應準確描述函式的功能。
11.避免使用無意義或含義不清的動詞為函式命名
12.函式的返回值要清楚、明了,讓使用者不容易忽視錯誤情況。
13/明確函式功能,精確(而不是近似)地實現函式設計。
14.減少函式本身或函式間的遞歸調用。
15.編寫可重入函式時,若使用全局變數,則應通過關中斷、信號量(即P、V操作)等手段對其加以保護。
可測性
2.在進行集成測試/系統聯調之前,要構造好測試環境、測試項目及測試用例,同時仔細分析並最佳化測試用例,以提高測試效率。
程式效率
2.在保證軟體系統的正確性、穩定性、可讀性及可測性的前提下,提高代碼效率。
3.不能一味地追求代碼效率,而對軟體的正確性、穩定性、可讀性及可測性造成影響。
4.編程時,要隨時留心代碼效率;最佳化代碼時,要考慮周全。
5.要仔細地構造或直接用彙編編寫調用頻繁或性能要求極高的函式。
6.通過對系統數據結構劃分與組織的改進,以及對程式算法的最佳化來提高空間效率。
7.在多重循環中,應將最忙的循環放在最內層。
8.儘量減少循環嵌套層次。
9.避免循環體內含判斷語句,應將循環語句置於判斷語句的代碼塊之中。
10.儘量用乘法或其它方法代替除法,特別是浮點運算中的除法。
質量保證
代碼質量保證優先原則
(1)正確性,指程式要實現設計要求的功能。
(2)穩定性、安全性,指程式穩定、可靠、安全。
(3)可測試性,指程式要具有良好的可測試性。
(4)規範/可讀性,指程式書寫風格、命名規則等要符合規範。
(5)全局效率,指軟體系統的整體效率。
(6)局部效率,指某個模組/子模組/函式的本身效率。
(7)個人表達方式/個人方便性,指個人編程習慣。
2.只引用屬於自己的存貯空間。
3.防止引用已經釋放的記憶體空間。
4.過程/函式中分配的記憶體,在過程/函式退出之前要釋放。
5.過程/函式中申請的(為打開檔案而使用的)檔案句柄,在過程/函式退出前要關閉。
6.防止記憶體操作越界。
7.時刻注意表達式是否會上溢、下溢。
8.認真處理程式所能遇到的各種出錯情況。
9.系統運行之初,要初始化有關變數及運行環境,防止未經初始化的變數被引用。
10.系統運行之初,要對載入到系統中的數據進行一致性檢查。
11.嚴禁隨意更改其它模組或系統的有關設定和配置。
12.不能隨意改變與其它模組的接口。
13.充分了解系統的接口之後,再使用系統提供的功能。
14.要時刻注意易混淆的操作符。當編完程式後,應從頭至尾檢查一遍這些操作符。
15.不使用與硬體或作業系統關係很大的語句,而使用建議的標準語句。
16.建議:使用第三方提供的軟體開發工具包或控制項時,要注意以下幾點:
(1)充分了解套用接口、使用環境及使用時注意事項。
(2)不能過分相信其正確性。
(3)除非必要,不要使用不熟悉的第三方工具包與控制項。
代碼編譯
2.同一項目組內,最好使用相同的編輯器,並使用相同的設定選項。
3.合理地設計軟體系統目錄,方便開發人員使用。
4.打開編譯器的所有告警開關對程式進行編譯。
5.在同一項目組或產品組中,要統一編譯開關選項。
6.使用工具軟體(如VisualSourceSafe)對代碼版本進行維護。
代碼測試
- 單元測試要求至少達到語句覆蓋。
- 單元測試開始要跟蹤每一條語句,並觀察數據流及變數的變化。
- 清理、整理或最佳化後的代碼要經過審查及測試。
常見編碼規則
分類 | 編碼標準 | 說明 |
單位元組字元編碼 | ISO-8859-1 | 最簡單的編碼規則,每一個位元組直接作為一個 UNICODE 字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 iso-8859-1 轉化為字元串時,將直接得到 [0x00D6, 0x00D0] 兩個 UNICODE 字元,即 "ÖÐ"。 反之,將 UNICODE 字元串通過 iso-8859-1 轉化為位元組串時,只能正常轉化 0~255 範圍的字元。 |
ANSI 編碼 | GB2312, BIG5, Shift_JIS, ISO-8859-2 …… | 把 UNICODE 字元串通過 ANSI 編碼轉化為“位元組串”時,根據各自編碼的規定,一個 UNICODE 字元可能轉化成一個位元組或多個位元組。 反之,將位元組串轉化成字元串時,也可能多個位元組轉化成一個字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 GB2312 轉化為字元串時,將得到 [0x4E2D] 一個字元,即 '中' 字。 “ANSI 編碼”的特點: 1. 這些“ANSI 編碼標準”都只能處理各自語言範圍之內的 UNICODE 字元。 2. “UNICODE 字元”與“轉換出來的位元組”之間的關係是人為規定的。 |
UNICODE 編碼 | UTF-8, UTF-16, UnicodeBig …… | 與“ANSI 編碼”類似的,把字元串通過 UNICODE 編碼轉化成“位元組串”時,一個 UNICODE 字元可能轉化成一個位元組或多個位元組。 與“ANSI 編碼”不同的是: 1. 這些“UNICODE 編碼”能夠處理所有的 UNICODE 字元。 2. “UNICODE 字元”與“轉換出來的位元組”之間是可以通過計算得到的。 |