第2章 程序的版式
1.空行
【規(guī)則2-1-1】在每個類聲明之后、每個函數(shù)定義結(jié)束之后都要加空行。
【規(guī)則2-1-2】在一個函數(shù)體內(nèi),邏揖上密切相關(guān)的語句之間不加空行,其它地方應(yīng)加空行分隔。
2.代碼行
【規(guī)則2-2-1】一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。
【規(guī)則2-2-2】if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。
【建議2-2-1】盡可能在定義變量的同時初始化該變量(就近原則)。
3.代碼行內(nèi)的空格
【規(guī)則2-3-1】關(guān)鍵字之后要留空格。
【規(guī)則2-3-2】函數(shù)名之后不要留空格,緊跟左括號‘(’,以與關(guān)鍵字區(qū)別。
【規(guī)則2-3-3】‘(’向后緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格。
【規(guī)則2-3-4】‘,’之后要留空格,如Function(x, y, z)。
【規(guī)則2-3-5】賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后應(yīng)當(dāng)加空格。
【規(guī)則2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址運算符)等前后不加空格。
【規(guī)則2-3-7】象“[]”、“.”、“->”這類操作符前后不加空格。
【建議2-3-1】對于表達(dá)式比較長的for語句和if語句,為了緊湊起見可以適當(dāng)?shù)厝サ粢恍┛崭?,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))。
4.對齊
【規(guī)則2-4-1】程序的分界符‘{’和‘}’應(yīng)獨占一行并且位于同一列,同時與引用它們的語句左對齊。
【規(guī)則2-4-2】{ }之內(nèi)的代碼塊在‘{’右邊數(shù)格處左對齊。
5.長行拆分
【規(guī)則2-5-1】代碼行大長度宜控制在70至80個字符以內(nèi)。
【規(guī)則2-5-2】長表達(dá)式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。
6.修飾符的位置
【規(guī)則2-6-1】應(yīng)當(dāng)將修飾符 * 和 & 緊靠變量名。
7.注釋
【規(guī)則2-7-1】注釋是對代碼的“提示”,而不是文檔。程序中的注釋不可喧賓奪主,注釋太多了會讓人眼花繚亂。注釋的花樣要少。
【規(guī)則2-7-2】如果代碼本來就是清楚的,則不必加注釋。
【規(guī)則2-7-3】邊寫代碼邊注釋,修改代碼同時修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。
【規(guī)則2-7-4】注釋應(yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。
【規(guī)則2-7-5】盡量避免在注釋中使用縮寫,特別是不常用縮寫。
【規(guī)則2-7-6】注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。
【規(guī)則2-7-8】當(dāng)代碼比較長,特別是有多重嵌套時,應(yīng)當(dāng)在一些段落的結(jié)束處加注釋,便于閱讀。
8.類的版式
類的版式主要有兩種方式:
(1)將private類型的數(shù)據(jù)寫在前面,而將public類型的函數(shù)寫在后面。采用這種版式的程序員主張類的設(shè)計“以數(shù)據(jù)為中心”,重點關(guān)注類的內(nèi)部結(jié)構(gòu)。
(2)將public類型的函數(shù)寫在前面,而將private類型的數(shù)據(jù)寫在后面。采用這種版式的程序員主張類的設(shè)計“以行為為中心”,重點關(guān)注的是類應(yīng)該提供什么樣的接口(或服務(wù))。
第3章 命名規(guī)則
1.共性規(guī)則
【規(guī)則3-1-1】標(biāo)識符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼”。
【規(guī)則3-1-2】標(biāo)識符的長度應(yīng)當(dāng)符合“min-length && max-information”原則
【規(guī)則3-1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。
【規(guī)則3-1-4】程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識符。
【規(guī)則3-1-5】程序中不要出現(xiàn)標(biāo)識符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會發(fā)生語法錯誤,但會使人誤解。
【規(guī)則3-1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞+名詞”。
【規(guī)則3-1-7】全局函數(shù)的名字應(yīng)當(dāng)使用“動詞”或者“動詞+名詞”(動賓詞組)。
【規(guī)則3-1-8】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等。
【建議3-1-1】盡量避免名字中出現(xiàn)數(shù)字編號,如Value1,Value2等,除非邏輯上的確需要編號。這是為了防止程序員偷懶,不肯為命名動腦筋而導(dǎo)致產(chǎn)生無意義的名字。
2.簡單的Windows應(yīng)用程序命名規(guī)則
【規(guī)則3-2-1】類名和函數(shù)名用大寫字母開頭的單詞組合而成。
【規(guī)則3-2-2】變量和參數(shù)用小寫字母開頭的單詞組合而成。
【規(guī)則3-2-3】常量全用大寫的字母,用下劃線分割單詞。
【規(guī)則3-2-4】靜態(tài)變量加前綴s_(表示static)。
【規(guī)則3-2-5】如果不得已需要全局變量,則使全局變量加前綴g_(表示global)。
【規(guī)則3-2-6】類的數(shù)據(jù)成員加前綴m_(表示member),這樣可以避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)同名。
【規(guī)則3-2-7】為了防止某一軟件庫中的一些標(biāo)識符和其它軟件庫中的沖突,可以為各種標(biāo)識符加上能反映軟件性質(zhì)的前綴。
3.簡單的Unix應(yīng)用程序命名規(guī)則
第4章 表達(dá)式和基本語句
1.運算符的優(yōu)先級
【規(guī)則4-1-1】如果代碼行中的運算符比較多,用括號確定表達(dá)式的操作順序,避免使用默認(rèn)的優(yōu)先級。
2.復(fù)合表達(dá)式
【規(guī)則4-2-1】不要編寫太復(fù)雜的復(fù)合表達(dá)式。
【規(guī)則4-2-2】不要有多用途的復(fù)合表達(dá)式。
【規(guī)則4-2-3】不要把程序中的復(fù)合表達(dá)式與“真正的數(shù)學(xué)表達(dá)式”混淆。
3.if 語句
【規(guī)則4-3-1】不可將布爾變量直接與TRUE、FALSE或者1、0進(jìn)行比較。
【規(guī)則4-3-2】應(yīng)當(dāng)將整型變量用“==”或“!=”直接與0比較。
【規(guī)則4-3-3】不可將浮點變量用“==”或“!=”與任何數(shù)字比較。
【規(guī)則4-3-4】應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較。
4.循環(huán)語句的效率
【建議4-4-1】在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。
【建議4-4-2】如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。
5.for 語句的循環(huán)控制變量
【規(guī)則4-5-1】不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止for 循環(huán)失去控制。
【建議4-5-1】建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。
6.switch語句
【規(guī)則4-6-1】每個case語句的結(jié)尾不要忘了加break,否則將導(dǎo)致多個分支重疊(除非有意使多個分支重疊)。
【規(guī)則4-6-2】不要忘記最后那個default分支。
7.goto語句
第5章 常量
1.為什么需要常量
如果不使用常量,直接在程序中填寫數(shù)字或字符串:
程序的可讀性(可理解性)變差;
在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯誤;
如果要修改數(shù)字或字符串,則會在很多地方改動,既麻煩又容易出錯。
【規(guī)則5-1-1】 盡量使用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串。
2.const 與 #define的比較
const優(yōu)點:
const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型;
有些集成化的調(diào)試工具可以對const常量進(jìn)行調(diào)試,但是不能對宏常量進(jìn)行調(diào)試。
【規(guī)則5-2-1】在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
3.常量定義規(guī)則
【規(guī)則5-3-1】需要對外公開的常量放在頭文件中,不需要對外公開的常量放在定義文件的頭部。
【規(guī)則5-3-2】如果某一常量與其它常量密切相關(guān),應(yīng)在定義中包含這種關(guān)系,而不應(yīng)給出一些孤立的值。
4.類中的常量
用類中的枚舉常量來實現(xiàn)整個類中都恒定的常量。
第6章 函數(shù)設(shè)計
1.參數(shù)的規(guī)則
【規(guī)則6-1-1】參數(shù)的書寫要完整,不要貪圖省事只寫參數(shù)的類型而省略參數(shù)名字。如果函數(shù)沒有參數(shù),則用void填充。
【規(guī)則6-1-2】參數(shù)命名要恰當(dāng),順序要合理。
【規(guī)則6-1-3】如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類型前加const,以防止該指針在函數(shù)體內(nèi)被意外修改。
【規(guī)則6-1-4】如果輸入?yún)?shù)以值傳遞的方式傳遞對象,則宜改用“const &”方式來傳遞,這樣可以省去臨時對象的構(gòu)造和析構(gòu)過程,從而提高效率。
【建議6-1-1】避免函數(shù)有太多的參數(shù),參數(shù)個數(shù)盡量控制在5個以內(nèi)。
【建議6-1-2】盡量不要使用類型和數(shù)目不確定的參數(shù)。
2.返回值的規(guī)則
【規(guī)則6-2-1】不要省略返回值的類型。
【規(guī)則6-2-2】函數(shù)名字與返回值類型在語義上不可沖突。
【規(guī)則6-2-3】不要將正常值和錯誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,而錯誤標(biāo)志用return語句返回。
【建議6-2-1】有時候函數(shù)原本不需要返回值,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá),可以附加返回值。
【建議6-2-2】如果函數(shù)的返回值是一個對象,有些場合用“引用傳遞”替換“值傳遞”可以提高效率。而有些場合只能用“值傳遞”而不能用“引用傳遞”,否則會出錯。
3.函數(shù)內(nèi)部實現(xiàn)的規(guī)則
【規(guī)則6-3-1】在函數(shù)體的“入口處”,對參數(shù)的有效性進(jìn)行檢查。
【規(guī)則6-3-2】在函數(shù)體的“出口處”,對return語句的正確性和效率進(jìn)行檢查。
如果函數(shù)返回值是一個對象,要考慮return語句的效率。
return String(s1 + s2);表示“創(chuàng)建一個臨時對象并返回它”。編譯器直接把臨時對象創(chuàng)建并初始化在外部存儲單元中,省去了拷貝和析構(gòu)的化費,提高了效率。
String temp(s1 + s2);return temp;表示“先創(chuàng)建一個局部對象temp并返回它的結(jié)果”
4.其它建議
【建議6-4-1】函數(shù)的功能要單一,不要設(shè)計多用途的函數(shù)。
【建議6-4-2】函數(shù)體的規(guī)模要小,盡量控制在50行代碼之內(nèi)。
【建議6-4-3】盡量避免函數(shù)帶有“記憶”功能。
【建議6-4-4】不僅要檢查輸入?yún)?shù)的有效性,還要檢查通過其它途徑進(jìn)入函數(shù)體內(nèi)的變量的有效性,例如全局變量、文件句柄等。
【建議6-4-5】用于出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況。
5.使用斷言
【規(guī)則6-5-1】使用斷言捕捉不應(yīng)該發(fā)生的非法情況。不要混淆非法情況與錯誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。
【規(guī)則6-5-2】在函數(shù)的入口處,使用斷言檢查參數(shù)的有效性(合法性)。
【建議6-5-1】在編寫函數(shù)時,要進(jìn)行反復(fù)的考查,并且自問:“我打算做哪些假定?”一旦確定了的假定,就要使用斷言對假定進(jìn)行檢查。
【建議6-5-2】一般教科書都鼓勵程序員們進(jìn)行防錯設(shè)計,但要記住這種編程風(fēng)格可能會隱瞞錯誤。當(dāng)進(jìn)行防錯設(shè)計時,如果“不可能發(fā)生”的事情的確發(fā)生了,則要使用斷言進(jìn)行報警。
6.引用與指針的比較
第7章 內(nèi)存管理
1.內(nèi)存分配方式
從靜態(tài)存儲區(qū)域分配。
在棧上創(chuàng)建。
從堆上分配,亦稱動態(tài)內(nèi)存分配。
2.常見的內(nèi)存錯誤及其對策
【規(guī)則7-2-1】用malloc或new申請內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL。防止使用指針值為NULL的內(nèi)存。
【規(guī)則7-2-2】不要忘記為數(shù)組和動態(tài)內(nèi)存賦初值。防止將未被初始化的內(nèi)存作為右值使用。
【規(guī)則7-2-3】避免數(shù)組或指針的下標(biāo)越界,特別要當(dāng)心發(fā)生“多1”或者“少1”操作。
【規(guī)則7-2-4】動態(tài)內(nèi)存的申請與釋放必須配對,防止內(nèi)存泄漏。
【規(guī)則7-2-5】用free或delete釋放了內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生“野指針”。
3.指針與數(shù)組的對比
數(shù)組要么在靜態(tài)存儲區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。
當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時,該數(shù)組自動退化為同類型的指針。
4.指針參數(shù)是如何傳遞內(nèi)存的
如果函數(shù)的參數(shù)是一個指針,不要指望用該指針去申請動態(tài)內(nèi)存。
編譯器總是要為函數(shù)的每個參數(shù)制作臨時副本,指針參數(shù)p的副本是 _p,編譯器使 _p = p。
5.free和delete把指針怎么啦
6.動態(tài)內(nèi)存會被自動釋放嗎
指針消亡了,并不表示它所指的內(nèi)存會被自動釋放。
內(nèi)存被釋放了,并不表示指針會消亡或者成了NULL指針。
7.杜絕“野指針”
原因:
指針變量沒有被初始化。
指針p被free或者delete之后,沒有置為NULL。
指針操作超越了變量的作用范圍。
8.有了malloc/free為什么還要new/delete
new/delete不是庫函數(shù),是操作符。
運算符new:能完成動態(tài)內(nèi)存分配和初始化工作。
運算符delete:能完成清理與釋放內(nèi)存工作。
9.內(nèi)存耗盡怎么辦?
(1)判斷指針是否為NULL,如果是則馬上用return語句終止本函數(shù)。
(2)判斷指針是否為NULL,如果是則馬上用exit(1)終止整個程序的運行。
(3)為new和malloc設(shè)置異常處理函數(shù)
10.malloc/free 的使用要點
11.new/delete 的使用要點
12.一些心得體會
越是怕指針,就越要使用指針。不會正確使用指針,肯定算不上是合格的程序員。
必須養(yǎng)成“使用調(diào)試器逐步跟蹤程序”的習(xí)慣,只有這樣才能發(fā)現(xiàn)問題的本質(zhì)。
第8章 C++函數(shù)的高級特性
1.函數(shù)重載的概念
只能靠參數(shù)而不能靠返回值類型的不同來區(qū)分重載函數(shù)。
如果C++程序要調(diào)用已經(jīng)被編譯后的C函數(shù),該怎么辦?
假設(shè)某個C函數(shù)的聲明如下:
void foo(int x, int y);
該函數(shù)被C編譯器編譯后在庫中的名字為_foo,而C++編譯器則會產(chǎn)生像_foo_int_int之類的名字用來支持函數(shù)重載和類型安全連接。由于編譯后的名字不同,C++程序不能直接調(diào)用C函數(shù)。C++提供了一個C連接交換指定符號extern“C”來解決這個問題。
當(dāng)心隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性
2.成員函數(shù)的重載、覆蓋與隱藏
3.參數(shù)的缺省值
【規(guī)則8-3-1】參數(shù)缺省值只能出現(xiàn)在函數(shù)的聲明中,而不能出現(xiàn)在定義體中。
【規(guī)則8-3-2】如果函數(shù)有多個參數(shù),參數(shù)只能從后向前挨個兒缺省,否則將導(dǎo)致函數(shù)調(diào)用語句怪模怪樣。
4.運算符重載
運算符 規(guī)則
所有的一元運算符 建議重載為成員函數(shù)
= () [] -> 只能重載為成員函數(shù)
+= -= /= *= &= |= ~= %= >>= <<= 建議重載為成員函數(shù)
所有其它運算符 建議重載為全局函數(shù)
5.函數(shù)內(nèi)聯(lián)
慎用內(nèi)聯(lián):
如果函數(shù)體內(nèi)的代碼比較長,使用內(nèi)聯(lián)將導(dǎo)致內(nèi)存消耗代價較高。
如果函數(shù)體內(nèi)出現(xiàn)循環(huán),那么執(zhí)行函數(shù)體內(nèi)代碼的時間要比函數(shù)調(diào)用的開銷大。
6.一些心得體會
第9章 類的構(gòu)造函數(shù)、析構(gòu)函數(shù)與賦值函數(shù)
1.構(gòu)造函數(shù)與析構(gòu)函數(shù)的起源
2.構(gòu)造函數(shù)的初始化表
構(gòu)造函數(shù)初始化表的使用規(guī)則:
如果類存在繼承關(guān)系,派生類必須在其初始化表里調(diào)用基類的構(gòu)造函數(shù)。
類的const常量只能在初始化表里被初始化。
非內(nèi)部數(shù)據(jù)類型的成員對象應(yīng)當(dāng)采用初始化表方式初始化,以獲取更高的效率。
3.構(gòu)造和析構(gòu)的次序
成員對象初始化的次序完全不受它們在初始化表中次序的影響,只由成員對象在類中聲明的次序決定。
4.示例:類String的構(gòu)造函數(shù)與析構(gòu)函數(shù)
5.不要輕視拷貝構(gòu)造函數(shù)與賦值函數(shù)
如果不主動編寫拷貝構(gòu)造函數(shù)和賦值函數(shù),編譯器將以“位拷貝”的方式自動生成缺省的函數(shù)。倘若類中含有指針變量,那么這兩個缺省的函數(shù)就隱含了錯誤。
拷貝構(gòu)造函數(shù)是在對象被創(chuàng)建時調(diào)用的,而賦值函數(shù)只能被已經(jīng)存在了的對象調(diào)用。
6.示例:類String的拷貝構(gòu)造函數(shù)與賦值函數(shù)
7.偷懶的辦法處理拷貝構(gòu)造函數(shù)與賦值函數(shù)
只需將拷貝構(gòu)造函數(shù)和賦值函數(shù)聲明為私有函數(shù),不用編寫代碼。
8.如何在派生類中實現(xiàn)類的基本函數(shù)
在編寫派生類的賦值函數(shù)時,注意不要忘記對基類的數(shù)據(jù)成員重新賦值。
9.一些心得體會
第10章 類的繼承與組合
1.繼承
【規(guī)則10-1-1】如果類A和類B毫不相關(guān),不可以為了使B的功能更多些而讓B繼承A的功能和屬性。
【規(guī)則10-1-2】若在邏輯上B是A的“一種”(a kind of ),則允許B繼承A的功能和屬性。
2.組合
【規(guī)則10-2-1】若在邏輯上A是B的“一部分”(a part of),則不允許B從A派生,而是要用A和其它東西組合出B。
第11章 其它編程經(jīng)驗
1.使用const提高函數(shù)的健壯性
const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強制保護(hù),可以預(yù)防意外的變動,能提高程序的健壯性。
對于非內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù),應(yīng)該將“值傳遞”的方式改為“const引用傳遞”,目的是提高效率。例如將void Func(A a) 改為void Func(const A &a)。
對于內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù),不要將“值傳遞”的方式改為“const引用傳遞”。否則既達(dá)不到提高效率的目的,又降低了函數(shù)的可理解性。例如void Func(int x) 不應(yīng)該改為void Func(const int &x)。
任何不會修改數(shù)據(jù)成員的函數(shù)都應(yīng)該聲明為const類型。
2.提高程序的效率
【規(guī)則11-2-1】不要一味地追求程序的效率,應(yīng)當(dāng)在滿足正確性、可靠性、健壯性、可讀性等質(zhì)量因素的前提下,設(shè)法提高程序的效率。
【規(guī)則11-2-2】以提高程序的全局效率為主,提高局部效率為輔。
【規(guī)則11-2-3】在優(yōu)化程序的效率時,應(yīng)當(dāng)先找出限制效率的“瓶頸”,不要在無關(guān)緊要之處優(yōu)化。
【規(guī)則11-2-4】先優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,再優(yōu)化執(zhí)行代碼。
【規(guī)則11-2-5】有時候時間效率和空間效率可能對立,此時應(yīng)當(dāng)分析哪個更重要,作出適當(dāng)?shù)恼壑浴?br />【規(guī)則11-2-6】不要追求緊湊的代碼,因為緊湊的代碼并不能產(chǎn)生高效的機器碼。
3.一些有益的建議
【建議11-3-1】當(dāng)心那些視覺上不易分辨的操作符發(fā)生書寫錯誤。
【建議11-3-2】變量(指針、數(shù)組)被創(chuàng)建之后應(yīng)當(dāng)及時把它們初始化,以防止把未被初始化的變量當(dāng)成右值使用。
【建議11-3-3】當(dāng)心變量的初值、缺省值錯誤,或者精度不夠。
【建議11-3-4】當(dāng)心數(shù)據(jù)類型轉(zhuǎn)換發(fā)生錯誤。盡量使用顯式的數(shù)據(jù)類型轉(zhuǎn)換(讓人們知道發(fā)生了什么事),避免讓編譯器輕悄悄地進(jìn)行隱式的數(shù)據(jù)類型轉(zhuǎn)換。
【建議11-3-5】當(dāng)心變量發(fā)生上溢或下溢,數(shù)組的下標(biāo)越界。
【建議11-3-6】當(dāng)心忘記編寫錯誤處理程序,當(dāng)心錯誤處理程序本身有誤。
【建議11-3-7】當(dāng)心文件I/O有錯誤。
【建議11-3-8】避免編寫技巧性很高代碼。
【建議11-3-9】不要設(shè)計面面俱到、非常靈活的數(shù)據(jù)結(jié)構(gòu)。
【建議11-3-10】如果原有的代碼質(zhì)量比較好,盡量復(fù)用它。但是不要修補很差勁的代碼,應(yīng)當(dāng)重新編寫。
【建議11-3-11】盡量使用標(biāo)準(zhǔn)庫函數(shù),不要“發(fā)明”已經(jīng)存在的庫函數(shù)。
【建議11-3-12】盡量不要使用與具體硬件或軟件環(huán)境關(guān)系密切的變量。
【建議11-3-13】把編譯器的選擇項設(shè)置為最嚴(yán)格狀態(tài)。
【建議11-3-14】如果可能的話,使用PC-Lint、LogiScope等工具進(jìn)行代碼審查。