今天讀了<<Windows 程式調試>>編寫便於調試的C++代碼這一章內容,覺得收穫較大,對本人在編程風格和編程習慣上有指導意義.筆記如下:
一.設計:
重要的特性是簡單性和耦合性, 大多數常見的設計錯誤來源於程式設計不必要的複雜成分,因此盡量使程式簡單合理.耦合性用來衡量不同對象之間的依賴程度,因此程式中能獨立的對象要盡量獨立出來.
二.C++編程風格
1.清晰地書寫代碼,最直接的說出你的意思;
2.結構良好的代碼具有更加有用的調用棧(call stack),它能給你更多的資訊;
3.使用良好的標識名字;
4.重新考慮匈牙利命名法,儘管這種命名法過去很有用,隨著時代改變,匈牙利命名法書寫的程式難以閱讀,難以維護,容易被人誤解;(疑問:現在大部分程式員都還是用這種命名法,有沒有更好更合理的方法呢?書中也沒有介紹,可能關鍵還是個人習慣問題吧)
5.用簡單的語句行;
6.使用統一的排列,用空格鍵代替tab鍵;
7.用括弧使書寫更清晰,如果你不能確定是否需要用括弧,你就需要用括弧.這樣可使優先順序的問題一目瞭然;
8.為了將來的維護,書寫注釋.
三.C++語言
1.選擇C++語言而不是C預先處理,但是要理解調試代碼的時候需要使用前置處理器;
2.要在標頭檔中聲明所有共用的外部符號,而且保留函數原型中的參數名;
3.記得在建構函式裡面初始化資料成員,
4.對於不熟悉的位元遮罩要檢查位元遮罩值,必要的時候,使用掩碼宏或者子域掩碼;
5.布林運算式應當檢查是否為假而不是檢查是否為真;
如:if(boolleanValue == TRUE)....;是不合理的,應當改寫為if (boolleanValue != FALSE)....;或if (boolleanValue )....;
6.應當防止使用整型,字元型和浮點變數出現減一錯誤,除零,溢出錯誤.
7.在使用指標和控制代碼時,當回收指標所指的對象的時候要重新初始化這個指標,並且要在指標被釋放之前為空白時就對其進行處理;
8.不要匆忙使用強制類型轉換,因強制類型轉換會在維護時引發問題,如果你在Visual C++中使用dynamic_cast,記住要在Project設定裡面選擇Enable Run_time Type Information選項;
9.在程式中仔細地使用const是一種好方法,能協助編譯器在編譯時間發現錯誤,但引入const時如果不是一開始就用的話,添加起來就會很麻煩.使用const 是一個不動則已,一動就動全身的問題;
10.如果迴圈變數的增加操作在每次迴圈的時候都必須執行的話,那麼就使用for語句而不是while語句;
四.Visual C++編譯器
1.盡量採用編譯時間刻檢查而不是運行時刻檢查,使用W4警告層級是個好辦法;
2.在調試版本裡總是使用GZ編譯選項;
3."沒有警告的編譯"法則對於大的程式開發小組來說很有協助,但是前提是允許出現異常,最終目標是消除錯誤,而不是消除警告.