C/C++程式設計規範精述
(匈牙利命名法)
1、排版上不同小結構間要空行分開,子邏輯項相對父邏輯項要縮進;{及if,while等判斷語句應獨占行并對齊,且後加空格以顯突出。
2、注釋位于相應代碼上面或右旁邊。且與其它代碼空行或空格隔開。
3、變量命名風格:采用UNIX 的全小寫加下劃線的風格或大小寫混排的方式,不要使用大小寫與下劃線混排的方式,但用作特殊辨別如辨別成員變量或全局變量的m_和g_,其後加上大小寫混排的方式是允許的。
定義辨別符(變量名/函數名)應展現code is document:類型的第一個字母小寫組合 + 有意義的單詞。全局變量和函數名前應加子產品名。
如DWORD dwSum = 0;
定義變量應當初始化,尤其是在使用前。
全局變量/靜态變量要注意可重入性(經過處理才可以)。結構定義應當盡是以4位元組(32位CPU一個指令就可以存取)對齊的。typedef 結構體時,不應當隻定義指針。
注意一下宏定義:#define MPPLNX_DUMP_READ_WRITE_CDB(x) ...
注:可重入性是指函數可以被多個任務程序調用;一個可重入的函數簡單來說就是可以被中斷的函數,也就是可以在這個函數執行的任何時刻中斷它,OS排程轉入去執行另外一段代碼,而傳回控制時不會出現錯誤;而不可重入的函數由于使用了一些系統資源,比如全局變量區,中斷向量表等,是以它如果被中斷的話,可能會出現問題。
滿足下列條件的函數多數是不可重入的:
1) 函數體内使用了靜态的資料結構;
2) 函數體内調用了malloc()或者free()函數;
3) 函數體内調用了标準I/O函數。
4、語句結構上,涉及有意義的常量,應當用枚舉或宏來代替;常量放在變量的左邊;用小括号來展現優先級。<<等邏輯關鍵字前後加空格。函數功能應當單一。
輸入參數的合法性檢查:
1)外部子產品或者使用者輸入的參數;
2)從實體鍊路上接收到的資料。
5、可測性上,代碼自始至終隻有一份,不存在開發版本和測試版本;測試與最終發行的版本是通過編譯開關的不同來實作,編譯開關要規範統一。
使用斷言來發現軟體問題;注意:在Release版本下,assert被定義成空操作(不執行),是以如下寫法是不對的:assert(E1T1_OK == E1T1_SetDefaultFramingMode());
6、程式效率上,循環體内工作量最小化,被信号量保護的區域應該盡可能小。
7、品質上,記憶體配置設定上,一般秉承誰申請,誰釋放,也樣:檔案句柄;尤其是有異常退出的地方。記憶體釋放後,一定要把指針置為NULL。
記憶體越界問題。
Unix下,多線程的中的子線程退出必需采用主動退出方式,即子線程應return出口。
不要濫用不等于禁止使用。goto使用的注意事項:
• Single entry, single exit? – use goto
• Don’t use more than one goto labels
• Use goto’s that go forward, not backward
• Make sure a goto doesn’t create unreachable code
用宏定義表達式時,要使用完備的括号;參數可能發生變化的表達式不要使用宏。
8、類屬性的聲明應按照如下順序常量 -> 靜态變量 -> 非靜态變量public -> protected -> private