-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

代碼大全(第2版)

( 簡體 字)
作者:金戈,湯凌,陳碩 張菲類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社代碼大全(第2版) 3dWoo書號: 32156
詢問書籍請說出此書號!

缺書
不接受訂購

出版日:10/1/2011
頁數:964
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
不接受訂購
ISBN:9787121022982
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

reface
前 言
普通的軟件工程實踐與最優秀的軟件實踐差距巨大——多半比其他工程學科中的這種差距都要大。因此傳播優秀實踐經驗的工具是十分重要的。
——Fred Brooks
我寫這本書的首要目的,就是希望縮小本行業中一般商業實踐與大師級人物及專家們之間的知識差距。許多強大的編程技術在被編程領域的大眾接觸之前,都已在學術論文和期刊里塵封了多年。
雖然近年來前衛的軟件開發實踐迅速發展,但普通的實踐手段并沒有太大變化。很多程序的開發仍然是漏洞百出、遲于交付并且超出預算,還有很多根本就無法滿足用戶的需求。軟件業界以及學術界的研究人員已經發現了不少行之有效的實踐經驗,足以解決自20世紀70年代以來編程領域中日益蔓延的大多數問題。可是這些實踐經驗很少在高度專業化的技術期刊之外對外發表,所以時至今日大多數編程的機構和組織還沒能用上這些技術。有研究表明,一項研發成果從其誕生之日起,到進入商業實踐階段,通常要經歷5到15年的時間甚至更長(Raghavan and Chand 1989;Rogers 1995;Parnas 1999)。這本手冊就是想縮短這一漫長的過程,讓那些關鍵性的研發成果現在就能為更多編程人員所用。
Who Should Read This Book
誰應當閱讀本書
本書中所匯集的研究成果和編程經驗,將幫助你創建更高質量的軟件,使你能更快速地進行開發,遇到的問題更少。本書將幫你弄明白過去為什么會遇到那些問題,并告訴你如何在將來避免它們。這里所描述的編程實踐將幫助你把控更大型的項目,還能在項目的需求發生變動時幫助你成功地維護并修改已經開發出來的軟件。
Experienced Programmers
經驗豐富的程序員
對于經驗豐富的程序員而言,本書正是他們想要的一本翔實、易用的軟件開發指南。本書關注的是“構建(construction)”,即整個軟件生命周期中最為人熟知的部分;本書把強大的軟件開發技術寫得讓自學的程序員和參加過正規訓練的程序員都能讀懂。
Technical Leads
技術領導
許多技術領導(或者說是技術帶頭人)都曾在他們的團隊中使用《代碼大全》(第一版)培訓經驗不足的程序員。當然,本書也可以用來填補你自己的知識缺陷。如果你是一位經驗豐富的程序員,你不一定會同意我給出的所有結論(如果不是這樣,我倒會覺得奇怪)。但如果你閱讀本書并思索其中的每一個問題之后,那么幾乎不會有人再能提出什么你未曾思考過的軟件構建方面的問題了。
Self-Taught Programmers
自學的程序員
如果你沒有受過太多的正規訓練,本書正是你的良伴。每年約有50000個新手進入這一專業領域(BLS 2004, Hecker 2004),但每年卻只有35000個人獲得與軟件相關的學位(NCES 2002)。從這些數據中我們可以很快得出一個結論——很多程序員并沒有接受過軟件開發方面的正規教育。在許多新興的專業人員社群中都可以看到自學的編程人員——工程師、會計師、科學家、教師以及小公司的老板們;編程序是他們工作的一部分,但他們并不一定把自己看作是程序員。無論你在編程方面受過何種程度的教育,本手冊都會讓你能對各種行之有效的編程實踐有深入的了解。
Students
學生
與有經驗但缺乏正規培訓的程序員對應的,是那些剛剛畢業的大學生。新近畢業的學生大多擁有豐富的理論知識,但卻缺乏創建產品級的程序(production programs)的實踐技術。關于編寫優秀代碼的實踐知識,就像部落里祭祀儀式上的舞蹈一樣,只能慢慢地從軟件架構師、項目負責人、分析師以及更有經驗的程序員那里傳承下來。更多的時候,這些知識就是程序員個人反復的嘗試和犯錯后的結晶。本書則是這些緩慢、傳統的智慧傳承方式的一種替代方案,它匯集了以往只能從他人經驗中獵取和收集的大量實用的經驗技巧和有效的開發策略。對于那些正在從學術環境轉向專業環境的學生來說,這是一本必備的讀物。
Where Else Can You Find This Information
還能從何處找到這些信息
本書綜合整理了來自四面八方的多種軟件構建技術。這些技術是軟件構建領域長年累月積聚下來的智慧財富,它們不僅分散,而且其中大部分素材常年散落于紙面之外(Hildebrand 1989,McConnell 1997a)。其實,內行的程序員們所用的那些強大有效的編程技術并不神秘。但是這些內行人士面對手頭日復一日緊張沖刺的項目,幾乎沒有誰花些時間和大家分享他們所學到的知識和技能。因此,程序員們可能很難找到很好的關于編程的信息來源。
而本書所描述的技術則填補了入門圖書和高級編程圖書之間的空白。當你讀過了《Java編程入門》、《高級Java編程》和《高高級Java編程》之后,如果你還想學更多的編程知識,那還能讀點什么呢?你可以閱讀Intel或Motorola的硬件參考手冊,閱讀Microsoft Windows或Linux操作系統的函數手冊,甚至是去閱讀講另外一門編程語言的書籍——你確實無法在一個缺乏這種詳細參考資料的環境中使用語言或者程序。但本書是為數不多的探究編程本質的書籍之一。無論你在何種環境下、用何種語言編寫程序,書中某些最有益處的編程技術都能派上用場。其他的書一般都忽略了這些實踐知識,而這也正是本書專注于這些知識的原因。
本書中的信息是從許多來源中提煉出來的,如下圖所示。想完全獲得在本書中看到的這些信息的另外途徑只有一條,那就是通讀堆積如山的書籍和成百上千本技術期刊,還得再加上大量的實際經驗。即便你把這些事情都做到了,本書仍然會對你很有益處,因為它把所有這些資料都集于一處,便于查閱。

Key Benefits of This Handbook
閱讀本書的收益
無論你是何種背景,本書都能助你在更短的時間內寫出更棒的程序,還不會那么頭疼。
全面的軟件構建參考 本書討論了軟件構建活動的方方面面,比如說軟件的質量,還有編程的思維方式。它還會深入闡述構建活動中的重要細節,如創建一個類的步驟,使用數據和控制結構時的各種事項,還有調試、重構、代碼調優的技術與策略等。你無須逐頁通讀所有主題。本書寫得讓你很容易就能找到感興趣的特定話題。
隨時備用的核對表 本書包括了大量的核對表(checklist),你可以用它來評估軟件架構、設計方法、類和子程序的質量、變量命名、控制結構、代碼格式、測試用例等等。
與時俱進的信息 本書介紹了一些當今最為入時的技術,其中有許多還未被廣泛采用。正因為本書擷取了實踐與研究兩者的精髓,它所介紹的這些技術將經久不衰,受用多年。
以更廣的視角檢視軟件開發 本書將給你一個機會,讓你凌駕于日復一日、忙于救火的混亂場面之上,看看到底什么是可行的,而什么又是不可行的。實踐中的程序員們很少有時間去閱讀數以百計的書籍與期刊,而本手冊萃取了其中的精華。本書所匯集的理論研究與實踐經驗將活躍你的思維,激勵你對自己項目的思考,使你的行動更有策略,避免反復陷入完全一樣的戰斗。
絕不注水 有些軟件書籍,其中精髓部分的凈重也就1克,卻注入了重達10克的水分。本書則會公平地探討每項技術的優劣。關于你自己項目的特定需求,你了解得要比任何人都清楚。因此本書僅是給你公正客觀的信息,讓你能夠具體情況具體分析,做出正確的決策。
有關概念適用于大多數常見的語言 本書中介紹的技術能讓你可以更好地利用你的編程語言,無論是C++、C#、Java、Visual Basic,還是其他類似語言。
豐富的代碼示例 本書中收集了近500個用于展現優、劣代碼之差異的示例。之所以給出這么多示例也是出于個人的偏好。因為從示例中我最能學到東西,我想其他程序員也該可以通過這種方式學得更好吧。
這些示例是用了多種不同的語言所寫成,因為學習并掌握不止一門語言通常是專業程序員職業生涯中的分水嶺。一旦一名程序員意識到編程原則是超越特定語言語法的東西時,通往能夠實質地改善編程質量并提高工作效率的知識的大門也就向他敞開了。
為了避免以多種語言寫成的例子成為讀者的負擔,我會盡量避免使用各語言中那些深奧的特性——除非當時就是需要探討它。為了弄懂一個代碼片段要表達的問題,你無須完全理解所有的細枝末節。如果你集中關注示例所展示的問題,那么無論它是用什么語言寫成的,你都能讀懂。為讓你更容易理解這些示例,我還給其中的關鍵部分加了注解。
引用其他信息來源 本書匯集了為數眾多關于軟件構建方面的可用信息,但這并不算完。在本書所有的章節中,“更多資源”一節都會介紹其他一些書籍和文章,你希望進一步深入了解感興趣的話題時可以閱讀它們。

配套網站 在本書的配套網站cc2e.com上會提供更新的核對表、參考書目、雜志文章、網頁鏈接等內容。要訪問《代碼大全》(第二版)中的相關信息,請如本段文字左側所示,在瀏覽器中輸入“cc2e.com/”,后跟一個四位阿拉伯數字即可。這樣的網址參考鏈接在本書中會有很多。
Why This Handbook Was Written
為什么要寫這本手冊
在軟件工程界,人們都清楚地認識到,應該把軟件開發中行之有效的實踐知識歸納、編撰成一本開發手冊。計算機科學與技術委員會(Computer Science and Technology Board)的一份報告指出,要想大幅提高軟件開發的質量和工作效率,需要把已知的行之有效的軟件開發實踐知識歸納、統一并廣為傳播(CSTB 1990, McConnell 1997a)。該委員會還指出,傳播這些知識的策略應建立在軟件工程手冊這個概念的基礎之上。
The Topic of Construction Has Been Neglected
軟件構建的話題常被忽視
曾幾何時,軟件開發和編寫代碼被認為是同一件事情。但隨著軟件開發周期中的各個活動被人們逐漸認識,該領域中一些最棒的頭頭腦腦們就開始花更多時間去分析和爭論諸如項目管理方法、需求、設計、測試等問題了。在這場學習研究新興領域的浪潮中,代碼構建這個與軟件開發骨肉相連的環節反而被忽視了。
關于軟件構建的討論之所以步履蹣跚,也是因為有人認為,如果將構建活動視作軟件開發中的一項特定活動,就暗示著也必須把它視作其中一個特定階段。然而實際上,軟件開發中的各項活動和各個階段無須以特定的關系一一對應起來;而且無論其他的軟件活動是分階段(phase)進行、還是迭代式(interation)進行,或者以某種其他方式進行,都不妨礙我們探討“構建活動”。
Construction Is Important
構建活動是重要的
構建活動被學者和作者所忽略的另一個原因是源于一個錯誤的觀念,他們認為與其他軟件開發活動相比,構建是一個相對機械化的過程,并沒有太多可改進的機會。然而事實并非如此。
“代碼構建”一般占據了小型項目65%的工作量,而在中型項目上也達到了50%。同時,“構建”也要為小型項目中75%的錯誤負責,在中到大型項目上這一比例為50%到75%。任何一個要為50%到75%的錯誤負責的活動環節顯然都是應該加以改善的。(第27章中對這些統計數據有更多詳細的探討。)
也有一些評論家指出,雖然構建階段發生的錯誤在所有錯誤中占有很大的比例,但修正這些錯誤的代價往往比“修正那些由于需求和架構所導致的錯誤”要低很多,這也就暗示著構建活動因此不那么重要。誠然,修正由構建活動所導致的錯誤的代價比較低這一說法是正確的,但它也引起了誤導——因為如果不修正這些錯誤,代價反而會高得令人難以置信。研究人員發現,軟件中一些代價最為昂貴的錯誤,其罪魁禍首常常是一些小范圍的代碼錯誤,其代價甚至可以飆至上億美元的程度(Weinberg 1983,SEN 1990)。可以用較低代價修正的錯誤,并不意味著這些錯誤的修正不重要。
人們忽視構建活動的另一種原因則頗具諷刺意味——就因為它是軟件開發中唯一一項肯定能完成的活動。對于需求,人們可以自以為是而不去潛心分析;對于架構,人們可以偷工減料而不去精心設計;對于測試,人們可以短斤少兩甚至跳過不做,而不去整體計劃并付諸實施。但只要寫出來的是程序,總歸要進行構建活動,這也說明,只要改進軟件構建這一環節,就一定對軟件開發實踐有好處。
No Comparable Book Is Available
沒有可媲美的同類書籍
既然看到構建活動有著如此清晰的重要性,我曾相信,當我構思此書時已有人寫過關于有效的軟件構建實踐的書籍了。對這樣一本介紹如何有效地進行編程的書籍的需求是顯而易見的,但是我卻只找到很少幾本關于軟件構建這一題材的書,而且那些書也僅是涉及到這個話題的一部分罷了。有些書寫于15年前,還是和一些深奧的語言——如ALGOL、PL/I、Ratfor以及Smalltalk等——緊密相關的。有些則是出自并不實際編寫產品代碼的教授之手。教授們寫出來的技術內容對于學生們的項目而言還行得通,但他們通常不知道如何在完整規模的開發環境中施展這些技術;還有些書是為了宣傳作者最新鐘情的某種方法論,卻忽略了那些被時間反復證明是行之有效的成熟實踐技術的巨大寶庫。
簡而言之,我沒有找到哪怕是一本試圖歸納總結來自專家經驗、業界研究以及學術成果的實踐編程技術的書籍。關于這個話題的討論要能和現今的編程語言、面向對象編程技術以及前沿的開發實踐緊密結合。很明顯需要有人寫出一本這樣的書出來,而他必須了解當今的理論發展水平,同時也編寫過足夠多的能反映實踐狀況的產品級代碼。我把本書構思成關于代碼構建活動的完整探討——一個程序員給其他程序員寫的書。

Author Note
作者注
歡迎您對本書中所探討的話題進行質詢,例如您的勘誤報告,或其他相關的內容。請發郵件與我聯系,我的郵箱是stevemmc@construx.com,也可以訪問我的網站:www.SteveMcConnell.com。
Bellevue, Washington
Memorial Day, 2004

Microsoft Learning Technical Support Every effort has been made to ensure the accuracy of this book. Microsoft Press provides corrections for books through the World Wide Web at the following address: http://www.microsoft.com/learning/support/ To connect directly to the Microsoft Knowledge Base and enter a query regarding a question or issue that you may have, go to: http://www.microsoft.com/learning/support/search.asp If you have comments, questions, or ideas regarding this book, please send them to Microsoft Press using either of the following methods: Postal Mail: Microsoft Press Attn: Code Complete 2E Editor One Microsoft Way Redmond, WA 98052-6399 E-mail: mspinput@microsoft.com
內容簡介:

代碼大全(第2版)是著名IT暢銷書作者、《IEEE Software》雜志前主編、具有20年編程與項目管理經驗的Steve McConnell十余年前的經典著作的全新演繹:第2版做了全面的更新,增加了很多與時俱進的內容,包括對新語言、新的開發過程與方法論的討論等等。這是一本百科全書式的軟件構建手冊,涵蓋了軟件構建活動的方方面面,尤其強調提高軟件質量的種種實踐方法。
作者特別注重源代碼的可讀性,詳細討論了類和函數命名、變量命名、數據類型和控制結構、代碼布局等編程的最基本要素,也討論了防御式編程、表驅動法、協同構建、開發者測試、性能優化等有效開發實踐,這些都服務于軟件的首要技術使命:管理復雜度。為了培養程序員編寫高質量代碼的習慣,書中展示了大量高質量代碼示例(以及用作對比的低質量代碼),提高軟件質量是降低開發成本的重要途徑。除此之外,本書歸納總結來自專家經驗、業界研究以及學術成果,列舉了大量軟件開發領域的真實案例與統計數據,提高本書的說服力。
本書中所論述的技術不僅填補了初級與高級編程實踐之間的空白,而且也為程序員們提供了一個有關軟件開發技術的信息來源。本書對經驗豐富的程序員、技術帶頭人、自學的程序員及沒有太多編程經驗的學生都是大有裨益的。可以說,只要您具有一定的編程基礎,想成為一名優秀的程序員,閱讀本書都不會讓您失望。

目錄:

第1章 歡迎進入軟件構建的世界 3
1.1 什么是軟件構建? 3
1.2 軟件構建為何如此重要? 6
1.3 如何閱讀本書 8
關鍵點 8
第2章 用隱喻來更充分地理解軟件開發 9
2.1 隱喻的重要性 9
2.2 如何使用軟件隱喻 11
2.3 常見的軟件隱喻 13
軟件中的書法:寫作代碼 13
軟件的耕作法:培植系統 14
軟件的牡蠣養殖觀點:系統生長 15
軟件構建:建造軟件 16
應用軟件技術:智慧工具箱 20
組合各個隱喻 20
更多資源 20
關鍵點 21
第3章 三思而后行:前期準備 23
3.1 前期準備的重要性 24
前期準備適用于現代軟件項目嗎? 25
準備不周全的誘因 25
關于開始構建之前要做前期準備的絕對有力且簡明的論據 27
3.2 辨明你所從事的軟件的類型 31
迭代開發法對前期準備的影響 33
在序列式開發法和迭代式開發法之間做出選擇 35
3.3 問題定義的先決條件 36
3.4 需求的先決條件 38
為什么要有正式的需求? 38
穩定需求的神話 39
在構建期間處理需求變更 40
3.5 架構的先決條件 43
架構的典型組成部分 45
3.6 花費在前期準備上的時間長度 55
更多資源 56
關鍵點 59
第4章 關鍵的“構建”決策 61
4.1 選擇編程語言 61
語言描述 63
4.2 編程約定 66
4.3 你在技術浪潮中的位置 66
“深入一種語言去編程”的例子 68
4.4 選擇主要的構建實踐方法 69
關鍵點 70
第5章 軟件構建中的設計 73
5.1 設計中的挑戰 74
設計是一個險惡的問題 74
設計是個了無章法的過程(即使它能得出清爽的成果) 75
設計就是確定取舍和調整順序的過程 76
設計受到諸多限制 76
設計是不確定的 76
設計是一個啟發式過程 76
設計是自然而然形成的 76
5.2 關鍵的設計概念 77
軟件的首要技術任務:管理復雜度 77
理想的設計特征 80
設計的層次 82
5.3 設計構造塊:啟發式方法 87
尋找現實世界中的對象 87
形成一致的抽象 89
封裝實現細節 90
當繼承能簡化設計時就繼承 91
隱藏秘密(信息隱藏) 92
找出容易改變的區域 97
保持松散耦合 100
查閱常用的設計模式 103
其他的啟發式方法 105
關于設計啟發的總結***** 108
使用啟發式方法的原則 109
5.4 設計實踐 110
迭代 110
分而治之 111
自上而下和自下而上的設計方法 111
建立試驗性原型 114
合作設計 115
要做多少設計才夠? 115
記錄你的設計成果 117
5.5 對流行的設計方法的評論 118
更多資源 119
軟件設計,一般性問題 119
軟件設計理論 120
設計模式 120
廣義的設計 121
標準 122
關鍵點 122
第6章 可以工作的類 125
6.1 類的基礎:抽象數據類型 126
需要用到ADT的例子 126
使用ADT的益處 127
更多的ADT示例 129
在非面向對象環境中用ADT處理多份數據實例 131
ADT和類 133
6.2 良好的類接口 133
好的抽象 133
良好的封裝 139
6.3 有關設計和實現的問題 143
包含(“有一個……”的關系) 143
繼承(“是一個……”關系) 144
成員函數和數據成員 150
構造函數 151
6.4 創建類的原因 152
應該避免的類 155
總結:創建類的理由 155
與具體編程語言相關的問題 156
6.6 超越類:包 156
更多資源 159
關鍵點 160
第7章 高質量的子程序 161
7.1 創建子程序的正當理由 164
似乎過于簡單而沒必要寫成子程序的操作 166
總結:創建子程序的理由 167
7.2 在子程序層上設計 168
7.3 好的子程序名字 171
7.4 子程序可以寫多長 173
7.5 如何使用子程序參數 174
7.6 使用函數時要特別考慮的問題 181
什么時候使用函數,什么時候使用過程 181
設置函數的返回值 182
7.7 宏子程序和內聯子程序 182
宏子程序在使用上的限制 184
內聯子程序 184
關鍵點 186
第8章 防范式編程 187
8.1 保護程序免遭無效輸入數據的破壞 188
8.2 斷言 189
建立自己的斷言機制 191
使用斷言的指導建議 191
8.3 錯誤處理技術 194
健壯性與正確性 197
高層次設計對錯誤處理方式的影響 197
8.4 異常 198
8.5 隔離程序以免遭由錯誤造成的損害 203
隔離區與斷言的關系 205
8.6 輔助調試代碼 205
不要自動地把產品版本的限制強加于開發版本之上 205
盡早引入輔助調試的手段 206
采用冒進式編程 206
計劃移除調試輔助代碼 206
8.7 確定在產品代碼中該保留多少防范式代碼 209
8.8 防范式編程時保持防范 210
其他資源 212
關鍵點 213
第9章 偽代碼編程過程 215
9.1 創建類和子程序的步驟概述 216
創建一個類的步驟 216
創建子程序的步驟 217
9.2 偽代碼 218
9.3 通過偽代碼編程過程創建子程序 220
設計子程序 225
編寫子程序 225
檢查代碼 230
收尾工作 232
根據需要重復上述步驟 232
9.4 偽代碼編程過程之外的其他方案 232
關鍵點 234
第10章 使用變量的一般事項 237
10.1 數據認知 238
數據認知測試 238
有關數據類型的其他資源 239
10.2 輕松掌握變量定義 239
隱式聲明 239
10.3 變量初始化原則 240
10.4 作用域 244
使變量引用局部化 245
盡可能縮短變量的“存活”時間 246
減小作用域的一般原則 249
有關縮小變量作用域的說明 250
10.5 持續性 251
10.6 綁定時間 252
10.7 數據類型和控制結構之間的關系 254
10.8 為變量指定單一用途 255
關鍵點 258
第11章 變量名的力量 259
11.1 選擇好變量名的注意事項 259
最重要的命名注意事項 260
以問題為導向 261
最適當的名字長度 262
變量名字的效果范圍 262
變量名字中的計算值限定詞 263
變量名字中的常用反義詞 264
11.2 為特定類型的數據命名 264
為循環索引命名 265
為狀態變量命名 266
為臨時變量命名 267
為布爾變量命名 268
為枚舉類型命名 269
為常量命名 270
11.3 命名規則的力量 270
為什么要有規則? 270
何時采用命名規則 271
正式程度 271
11.4 非正式命名規則 272
語言無關規則的指導原則 272
語言相關規則的指導原則 275
混合語言編程的注意事項 276
命名規則示例 276
11.5 標準前綴 279
用戶自定義類型縮寫 279
語義前綴 280
標準前綴的優點 281
11.6 創建具備可讀性的短名稱 282
一般的縮寫指導原則 282
語音縮寫 282
有關縮寫的評論 282
11.7 應該避免的名稱 285
關鍵點 289
第12章 基本數據類型 291
12.1 使用數的普遍規則 292
12.2 整數 293
12.3 浮點數 295
12.4 字符和字符串 297
C中的字符串 299
12.5 布爾變量 301
12.6 枚舉類型 303
如果你的語言里沒有枚舉類型 307
12.7 命名常量 307
12.8 數組 310
12.9 創建你自己的類型(類型別名) 311
為什么創建自己的類型的示例是用Pascal和Ada寫的? 314
創建自定義數據類型的指導原則 315
關鍵點 318
第13章 不常見的數據類型 319
13.1 結構 319
13.2 指針 323
用來理解指針的例子 323
使用指針的一般技巧 325
C++指針 332
C指針 334
13.3 全局數據 335
與全局數據有關的常見問題 335
使用全局數據的理由 338
只有萬不得已時才使用全局數據 339
用訪問子程序來取代全局數據 339
如何降低使用全局數據的風險 342
其他資源 343
關鍵點 344
第14章 組織直線型代碼 347
14.1 必須有明確順序的語句 347
14.2 順序無關的語句 351
使代碼易于自上而下的閱讀 351
把相關的語句組織在一起 352
關鍵點 353
第15章 使用條件語句 355
15.1 if語句 355
簡單if-then語句 355
if-then-else語句串 358
15.2 case語句 361
為case選擇最有效的排序 361
使用case語句的提示 361
關鍵點 366
第16章 控制循環 367
16.1 選擇循環的種類 367
什么時候使用while循環 368
什么時候用帶退出的循環 369
何時使用for循環 372
何時使用foreach循環 372
16.2 循環控制 373
進入循環 373
處理好循環體 375
退出循環 377
檢查端點 381
使用循環變量 382
循環應該有多長? 385
16.3 輕松創建循環——由內而外 385
16.4 循環和數組的關系 387
關鍵點 389
第17章 不常見的控制結構 391
17.1 子程序中的多個返回 392
17.2 遞歸 393
遞歸的例子 394
使用遞歸的技巧 396
17.3 goto 398
反對goto的論點 398
支持goto的觀點 399
關于goto的虛假辯論 400
錯誤處理和goto 401
goto和在else子句中的共享代碼 406
goto使用原則總結 407
17.4 對不常見控制結構的看法 408
其他資源 408
關鍵點 410
第18章 表驅動方法 411
18.1 表驅動方法使用總則 411
使用表驅動方法的兩個問題 412
18.2 直接訪問表 413
示例:一個月中的天數(Days-in-Month) 413
示例:保險費率 415
例子:靈活的消息格式(Flexible-Message-Format) 416
構造查詢鍵值 423
18.3 索引表訪問(Indexed Access Tables) 425
18.4 階梯訪問表 426
18.5 表查詢的其他示例 429
關鍵點 430
第19章 一般控制問題 431
19.1 布爾表達式 432
用true和false做布爾判斷 432
簡化復雜的表達式 434
編寫肯定形式的布爾表達式 436
用括號使布爾表達式更清晰 438
理解布爾表達式是如何求值的 439
Writing Numeric Expressions in Number-Line Order 441
按照數軸的順序編寫數值表達式 441
Guidelines for Comparisons to 0 442
與0比較的指導原則 442
Common Problems with Boolean Expressions 443
布爾表達式的常見問題 443
19.2 Compound Statements (Blocks) 444
19.2 復合語句(塊) 444
19.3 Null Statements 445
19.3 空語句 445
19.4 Taming Dangerously Deep Nesting 446
19.4 馴服危險的深層嵌套 446
Summary of Techniques for Reducing Deep Nesting 454
對減少嵌套層次的技術的總結 454
19.5 A Programming Foundation: Structured Programming 455
19.5 編程基礎:結構化編程 455
The Three Components of Structured Programming 455
結構化編程的三個組成部分 455
19.6 Control Structures and Complexity 457
19.6 控制結構與復雜度 457
How Important Is Complexity? 458
復雜度的重要性 458
General Guidelines for Reducing Complexity 458
降低復雜度的一般原則 458
Other Kinds of Complexity 460
其它類型的復雜度 460
CHECKLIST: Control-Structure Issues 460
檢查表:控制結構相關事宜 460
Key Points 461
關鍵點 461
序: