《高質量
c++程式設計指南》是一本關於c++程式設計風格的指導、建議性的書,誕生已經有一年多了,初學c++,閱讀此書,感覺甚好,收穫很大。這本書對初學者掌握好的編碼習慣有極大的幫助,對老手改進編碼方式也有好處。
xml:namespace prefix = o ns = "urn:schemas-microsoft-com:
office:office" />
這裡把讀書筆記拿出來共享,希望對大家有幫助。
標頭檔案:
為了防止標頭檔案被重複引用,應當用ifndef/define/endif結構產生預處理塊。
用#include <filename.h>格式來引用標準庫的標頭檔案(編譯器從標準庫目錄開始搜尋)。
用#include「filename.h」格式來引用非標準庫的標頭檔案(編譯器從使用者的工作目錄開始搜尋)。
標頭檔案中只存放「宣告」而不存放「定義」 。
**行:
在每個類宣告之後、每個函式定義結束之後都要加空行。
在乙個函式體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。
一行**只做一件事情,如只定義乙個變數,或只寫一條語句。這樣的**容易閱讀,並且方便於寫注釋。
if、for、while、do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}。
盡可能在定義變數的同時初始化該變數(就近原則)。
空格:
關鍵字之後要留空格。
函式名之後不要留空格,緊跟左括號『(』,以與關鍵字區別。
『(』向後緊跟,『)』、『,』、『;』向前緊跟,緊跟處不留空格。
『,』之後要留空格,如function(x, y, z)。如果『;』不是一行的結束符號,其後要留空格,如for (initialization; condition; update)。
二元操作符的前後應當加空格。一元操作符前後不加空格。
象「[]」、「.」、「->」這類操作符前後不加空格。
對齊:
程式的分界符『』應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。
之內的**塊在『{』右邊數格處左對齊。
長行拆分:
**行最大長度宜控制在70至80個字元以內。
長表示式要在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。
修飾符的位置:
應當將修飾符*和& 緊靠變數名。
注釋:
注釋是對**的「提示」,不是文件。不可喧賓奪主,太多了會讓人眼花繚亂。花樣要少。
邊寫**邊注釋,修改**同時修改相應的注釋,以保證注釋與**的一致性。不再有用的注釋要刪除。
注釋應當準確、易懂,防止注釋有二義性。
盡量避免在注釋中使用縮寫,特別是不常用縮寫。
注釋的位置應與被描述的**相鄰,可以放在**的上方或右方,不可放在下方。
當**比較長,特別是有多重巢狀時,應當在一些段落的結束處加注釋,便於閱讀。
命名規則:
識別符號應當直觀且可以拼讀,可望文知意,不必進行「解碼」。最好採用英文單詞或其組合,切忌使用漢語拼音來命名。
識符的長度應當符合「min-length && max-information」原則。
命名規則盡量與所採用的作業系統或開發工具的風格保持一致。
程式中不要出現僅靠大小寫區分的相似的識別符號。
程式中不要出現識別符號完全相同的區域性變數和全域性變數,會使人誤解。
變數的名字應當使用「名詞」或者「形容詞+名詞」。
全域性函式的名字應當使用「動詞」或者「動詞+名詞」(動賓片語)。
類的成員函式應當只使用「動詞」,被省略掉的名詞就是物件本身。
用正確的反義詞組命名具有互斥意義的變數或相反動作的函式等。
盡量避免名字中出現數字編號,除非邏輯上的確需要編號。
簡單的windows
應用程式命名規則:
類名和函式名用大寫字母開頭的單詞組合而成。
變數和引數用小寫字母開頭的單詞組合而成。
常量全用大寫的字母,用下劃線分割單詞。
靜態變數加字首s_(表示static)。
如果不得已需要全域性變數,則使全域性變數加字首g_(表示global)
類的資料成員加字首m_(表示member),這樣可以避免資料成員與成員函式的引數同名。
為了防止某一軟體庫中的一些識別符號和其它軟體庫中的衝突,可以為各種識別符號加上能反映軟體性質的字首。
表示式和基本語句:
如果**行中的運算子比較多,用括號確定表示式的操作順序,避免使用預設的優先順序。
不要編寫太複雜的復合表示式。
不要有多用途的復合表示式。
不要把程式中的復合表示式與「真正的數學表示式」混淆。
不可將布林變數直接與true、false或者1、0進行比較。
應當將整型變數用「==」或「!=」直接與0 比較。
不可將浮點變數用「==」或「!=」與任何數字比較。
應當將指標變數用「==」或「!=」與null 比較。
不可在for迴圈體內修改迴圈變數,防止for迴圈失去控制。
每個case 語句的結尾不要忘了加break,否則將導致多個分支重疊(除非有意使多個分支重疊)。
不要忘記最後那個default 分支。即使程式真的不需要default 處理,也應該保留。
常量:
在c++ 程式中只使用const 常量而不使用巨集常量(#define)。
需要對外公開的常量放在標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。
如果某一常量與其它常量密切相關,應在定義中包含這種關係,而不應給出一些孤立的值。
函式設計:
引數的書寫要完整,如果函式沒有引數,則用void 填充。
如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改。
如果輸入引數以值傳遞的方式傳遞物件,則宜改用「const &」方式來傳遞,這樣可以省去臨時物件的構造和析構過程,從而提高效率。
避免函式有太多的引數,引數個數盡量控制在5個以內。
不要省略返回值的型別。
函式名字與返回值型別在語義上不可衝突。
不要將正常值和錯誤標誌混在一起返回。正常值用輸出引數獲得,而錯誤標誌用return語句返回。
有時候函式原本不需要返回值,但為了增加靈活性如支援鏈式表達,可以附加返回值。
在函式體的「入口處」,對引數的有效性進行檢查。
在函式體的「出口處」,對return語句的正確性和效率進行檢查。
(1)return語句不可返回指向「棧記憶體」的「指標」或者「引用」,因為該內存在函式體結束時被自動銷毀。
(2)要搞清楚返回的究竟是「值」、「指標」還是「引用」
(3)如果函式返回值是乙個物件,要考慮return語句的效率。
函式的功能要單一,不要設計多用途的函式。
函式體的規模要小,盡量控制在50行**之內。
盡量避免函式帶有「記憶」功能。相同的輸入應當產生相同的輸出。
用於出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況。
高質量程式設計指南(筆記)
你使用乙個語言特徵是因為你需要它,而不是因為它存在 bjarne stroustrup 首先掌握語言的特徵及及其使用方法,再學習具體的語言實現才是語言學習之道!我們不能因為bjarne說過那樣的話就不去使用甚至不去學習c c 的高階特性。要想高效的使用一種語言,必須要了解它的各個特徵和他們的使用方法...
C 高質量程式設計指南筆記(三)
define c語言的巨集常量 const c 編譯器可以對前者進行型別安全檢查。1 在c 中只使用const常量而不使用巨集常量,即const常量完全取代巨集常量 2 需要對外公開的常量放再標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。為便於管理,可以把不同模組的常量集中存放在乙個公共標頭檔...
C 高質量程式設計指南筆記(七)
1 用const修飾函式的引數時,const 只能修飾輸入引數。1 如果輸入引數採用 指標傳遞 那麼加const修飾可以防止意外的改動該指標,起到保護作用。2 如果採用的是值傳遞,由於函式將自動產生臨時變數用於賦值該函式,該輸入引數本來就無需改動,所以不要加const 例如 不要將void func...