本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/hairetz/archive/2009/04/30/4141043.aspx
1. 為防止頭文件被重復(fù)利用(通常發(fā)生在#include的嵌套中),應(yīng)用#ifndef/#define/#endif產(chǎn)生預(yù)處理塊。比如要防止graphics.h的頭文件被重復(fù)利用,定義#ifndef GRAPHICS_H。(為什么用大寫?)。
2. 好的命名規(guī)則:靜態(tài)變量加前綴s_,全局變量加前綴g_,類的數(shù)據(jù)成員加前綴m_。
3. 不可將bool變量直接與TRUE,FALSE或者1,0進(jìn)行比較。區(qū)別于整型變量與零值比較。不可將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較,指針變量的零值為“空”(記為NULL)。盡管NULL的值與0相同,但兩者的意義不同。(參考高質(zhì)量C++編程指南4.3節(jié))。
4. 在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。
5. 如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。
6. C語言用#define來定義常量(稱為宏常量)。C++語言除了#define外還可以用const來定義常量(稱為const常量)。在C++程序中只使用const常量而不使用宏常量,因?yàn)槠湎啾?/span>#define來定義常量有更多的優(yōu)點(diǎn)。Const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。因此編譯器可以對前者進(jìn)行安全檢查。
7. 建立在整個(gè)類中都恒定的常量:別指望const數(shù)據(jù)成員了,應(yīng)該用類中的枚舉常量來實(shí)現(xiàn)。由于const數(shù)據(jù)成員只在某個(gè)對象生存期內(nèi)是常量,而對整個(gè)類而言是可變的,因?yàn)轭惪梢詣?chuàng)建多個(gè)對象,不同對象其const數(shù)據(jù)成員值可以不同。枚舉常量不會(huì)占用對象的存儲(chǔ)空間,他們在編譯時(shí)被全部求值。枚舉常量的缺點(diǎn)是它的隱含數(shù)據(jù)類型是整數(shù),其最大值有限,且不能表示浮點(diǎn)數(shù)。
8. 如果參數(shù)是指針,并且僅做輸入用,則應(yīng)在類型前加const,以防止該指針在函數(shù)體內(nèi)被以外修改。
9. 函數(shù)名字與返回值類型在語義上不可沖突,違反這條規(guī)則的典型代表是C標(biāo)準(zhǔn)庫函數(shù)getchar。由于getchar的原型為int getchar(void)。
10. 指針有些“似是而非”的特征:(1)指針消亡了,并不表示它所指的內(nèi)存會(huì)被自動(dòng)釋放(2)內(nèi)存被釋放了,并不表示指針會(huì)消亡或者成為NULL指針。
11. exit(1)終止整個(gè)程序的運(yùn)行?