良好編碼風格習慣整理


1、在每個類聲明之火、每個函數定義結束之后都要加空行

2、if ,for,while,do等語句自占一行,執行語句不得緊跟其后。不論執行語句有多少都加上{ },方便代碼閱讀,防止書寫失誤

3、盡可能在定義變量的同時初始化該變量(就近原則),對於頭文件的指針變量最好在構造函數中賦NULL

4、‘(’向后緊跟,‘,’,‘)’,‘;’向前緊跟,緊跟處不留空格

5、‘,’之后要留空格,如Function(x, y, z), 如果‘;’不是一行的結束符號,其后要留空格,如for (int i = 0; i<n; ++i)

6、對於“=”、“+=”、“>=”、“%”、“||”、“<<”等二元操作符的前后應當加空格

7、對於“!”、“~”、“++”、“--”、“&”(取地址)等一元操作符前后不加空格

8、對於表達式比較長的for語句和if語句,為了緊湊可以適當去掉一些空格,如for (i=0; i<10;++i)和if ((a<=b) && (c<=d))

9、長表達式要在低優先級操作符處拆分成新行,操作符放在行首突出。拆分的新行要適當縮進,整齊排版

  如:

    if ((very_longer_varible1 >= very_longer_varible12)

    && (very_logner_varible2 >= very_longer_varible22)

    && (very_longer_varible3 >= very_longer_varible32))

10、變量命名規則首選Microsoft公司的“匈牙利”法:變量名=屬性+類型+對象,若是指針變量加前綴p,常量全大寫 const int MAX = 100,其他變量用類似方法

11、不可將浮點變量用“==”或是“!=”與任何數據比較,正確方式:if ((x>=-EPSINON) && (x<=EPSINON)) ,EPSINON是允許誤差,即精度

12、if判斷中 if (bool)或是if (int ==0)或是if (p==NULL),p為指針

13、在多重循環中,如果允許,應當將最長的循環放在最內層,最短循環放在最外層,以減少CPU跨切循環的次數

14、一般將目的參數放在前面,源參數放在后面:void StringCopy(char *strDestination, char *strSource)

15、如果輸入參數以值傳遞方式傳遞對象,應該用“const &”方式傳遞,節省臨時對象的構造和析構過程,提高效率

16、函數體的規模要小,盡量控制在50行以內,函數之間低耦合方便調用

17、使用斷言,assert僅在VS中debug版本起作用,幫助我們找到錯誤發生的原因,使用斷言要明確注釋

18、在malloc或是new申請內存之后,應該立即檢查指針值是否為NULL,方式使用指針為空的內存,free或是delete釋放內存之后,立即將指針設置為NULL,防止產生“野指針”

19、注意數組作為函數參數時會自動退化為指針

20、關於野指針:"野指針不是NULL指針,是指向“‘垃圾’”內存的指針,一般不會錯用NULL指針,因為用if語句容易判斷,但是“野指針”沒辦法用if語句判斷。生成野指針的主要原因:a)指針變量沒有初始化,應該賦值為NULL或是指向合法內存。b)指針被free或是delete后沒有置為NULL。如果一個指針是NULL指針,那么free多少次都不會出問題,如果不是NULL,那么連續free兩次就會導致程序運行錯誤

20、頭文件只是用到類指針時,添加類的申明而不是整個類文件,避免生成的工程文件過大,節省編譯時間,尤其是在Qt中。

21、如果派生類的函數與基類的函數同名,但是參數不同,此時無論有無virtual關鍵字,基類的函數將被隱藏(區別於重載,重寫(參數相同))

22、參數缺省值只能出現在函數的聲明中,而不能出現在定義體中,在編譯時,缺省值由編譯器自動插入。如果函數由多個參數,則只能由后到前挨個缺省。不合理的使用參數的缺省值會導致重載函數產生二義性(當只傳入非缺省值時,編譯器不能選擇哪個重載函數)

23、構造函數的初始化列表:如果類存在繼承關系,派生類必須在其初始化表里調用基類的構造函數

24、一個類中相同的代碼,最好是提煉成一個獨立的方法,方便調用。不同類中重復的代碼,提煉成一個新的類

25、關於編程習慣:在編寫程序前至少有明確思路(數據結構和算法),而不是坐在電腦前邊輸邊想,東拼西湊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM