就算你熟記并正確使用了,寫(xiě)出來(lái)的代碼也輕易產(chǎn)生歧義而使其可讀性較差。 好的風(fēng)格 if ((a b) && (a & c)) 壞的風(fēng)格 if (a b && a & c) 雖然后者和前者功能一樣,但后者是很恐怖的,難以閱讀。 3)不要編寫(xiě)太復(fù)雜的復(fù)合表達(dá)式。 復(fù)合表達(dá)式使用在適當(dāng)?shù)膱?chǎng)合可以使代碼更加簡(jiǎn)潔,但不能因?yàn)檫@個(gè)簡(jiǎn)潔而帶來(lái)理解的復(fù)雜。 例如: max = a > b ?(a > c ? a : c) : (b > c ? b : c) // 復(fù)合表達(dá)式過(guò)于復(fù)雜 應(yīng)該修改為: max = a; if(max < b) { max = b; } if(max < c) { max = c; }
6)改善循環(huán)的效率 對(duì)于字符串name,看下面的循環(huán): for (i = 0; i < strlen(name); i++)效率明顯差于下面的循環(huán): n = strlen(name); for (i = 0; i < n; i++) 后者只要計(jì)算name的長(zhǎng)度一次。 7)少用、慎用goto語(yǔ)句,并不禁用
goto語(yǔ)句能從多重循環(huán)體或者代碼堆里一下子跳到外面, 例如: { … { … { … on error goto errorhandler; } } } errorhandler: … 在Visual Basic中這一招是常用的。 8)消除魔鬼數(shù) 魔鬼數(shù)者,沒(méi)名字的常數(shù)也,你若看英文資料,它們的說(shuō)法是magic data,我們的一些作品將其翻譯為“魔術(shù)數(shù)”,我更愿意將其翻譯為“魔鬼數(shù)”,因?yàn)樗且粋€(gè)導(dǎo)致代碼的可讀性極差的“魔鬼”。 假使你在程序里寫(xiě)下下面的一段代碼: for (i=0; i < 100; i++);for (i=0; i < 99; i++);誰(shuí)都不知道100、99是個(gè)什么玩 意,你可能意味著100是范圍的邊界(最大值),就應(yīng)該給出定義,代碼的讀者才能明白你的意思: #define MAX 100 /* C語(yǔ)言的宏常量 */ const int MAX = 100; // C++ 語(yǔ)言的const常量 for (i=0; i < MAX; i++);for (i=0; i < MAX-1; i++)的意思就很清楚了。
int getchar(void); 10)亂指一氣的指針 “野指針”者,亂指一氣的指針也,它不是NULL指針,是指向“垃圾”內(nèi)存的指針。野 指針是很危險(xiǎn)的,是經(jīng)常導(dǎo)致bug的原因,它的成因主有兩種:一是指針變量沒(méi)有被初始化。在C/C++中任何指針變量剛被創(chuàng)建時(shí)不會(huì)自動(dòng)成為NULL指針,它的缺省值是隨機(jī)的。所以,指針變量在創(chuàng)建的同時(shí)應(yīng)當(dāng)被初始化,要么將指針設(shè)置為NULL,要么讓它指向合法的內(nèi)存。例如