版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第7章編碼中的假象寫小說,就希望每一頁都能吸引讀者,使讀者激動、吃驚、懸念!決不能使讀者感到厭煩。因此在每一頁都要撒些胡椒粉,描述一些場景來吸引讀者、如果小說寫成;“罪犯走近喬并刺傷了他”,讀者就會睡覺了。為了使讀者感興趣,就要使得當描述到喬聽到身后“咚!咚!咚!”的腳步聲時,讀者也能感覺到喬是怎樣的恐懼;當“咚!咚”的腳步聲慢慢地越來越近的時候,讀者也能感覺到喬的手在冒汗;當腳步聲加速,罪犯朝喬逼近的時候,讀者也能理解到喬是怎樣的驚慌
2、。最重要的是讀者保持著懸念,喬能不能逃脫?……在小說中使用驚奇和懸念很重要也很必要。但是如果把它們放到代碼中,那就糟糕了。當寫代碼時,“情節(jié)”應該直觀,以便別的程序員能預先清楚地知道將要發(fā)生的一切。如果用代碼表述罪犯走近喬并刺傷了他,那么寫成“罪犯走近喬并刺傷了他”最恰當了。該代碼簡短、清楚、并講述了所發(fā)生的一切。但是由于某些原因,程序員拒絕寫簡捷清楚的代碼,卻極力主張使用具有技巧的、比較精煉的、異乎尋常的編碼方法,最好不要這樣。但是直
3、觀的代碼并不意味著是簡單的代碼,直觀的代碼可以使你沿著一條明確無奇的路徑從A點到達B點。必要的時候直觀的代碼可能也很復雜。因此,本章將考察導致產生不直觀代碼的編程風格。例子都很巧妙、有技巧,但是并非顯而易見,當然,這些程序都會引起一些微妙的錯誤。要注意到底引用了什么要注意到底引用了什么下面的代碼是上一章所給的memchr的無錯版本:voidmemchr(voidpvunsignedchsize_tsize)unsignedpch=(un
4、signed)pvwhile(size0)if(pcd==ch)return(pch)pchreturn(NULL)大多數程序員玩弄的一種游戲是“我如何使得代碼更快?”的游戲。這并不是壞游戲,但是正如我們從這本書所感到的那樣:如果過份地熱衷于這種游戲,那就是壞事。例如如果在上面的例子上玩這個游戲的話,你就會問自己:“如何使循環(huán)加快?”只儲ch時,就可能錯改另一個進程要引用的存儲空間。最后一點尤其會引起麻煩,因為有許多方式都可以引起系統(tǒng)癱
5、瘓。如果你調用memchr來查尋已分配了的存儲空間,卻不料破壞了存儲管理程序的某個數據結構,這將如何是好呢?如果并行進程是代碼連接或中斷處理之類的例程,那么最好不要調用存儲管理程序,否則系統(tǒng)可能會癱瘓。如果調用memchr掃描全局數組并且步入了由另一個任務引用的交界變量,那又該如何呢?如果程序的兩個實例要并行地查找共享數據時,那又會怎樣呢?有很多情況都會使程序死掉。當然,你還不能體驗到memchr引起的微妙錯誤,因為只要不修改關鍵的存儲
6、區(qū),它就會工作得很好。但像memchr這樣的函數一旦引起了錯誤,要孤立這些錯誤就象在大海里撈針一樣的困難。這是因為:執(zhí)行memchr的進程工作得很好,而另一個進程卻因為存儲區(qū)損壞而崩潰,此時,就沒有理由懷疑是memchr引起的。這樣錯誤就很難發(fā)現?,F在你就知道了,為什么要買價值$50,000的電路仿真器了。因為它們記錄從開始到崩潰前的每一個周期、每一條指令、和計算機引用的每一段數據。可能要花幾天時間才能艱難地讀完仿真器的輸出,但是如果堅
7、持而且不盲目地處理這些輸出結果的話,應該能找到錯誤之所在。早已有警句:不要引用不屬于你的存儲區(qū)。我們又何必如上例那樣忍受痛苦絞盡腦汁呢?注意,“引用”意味著不僅要讀而且要寫。讀未知的存儲區(qū)可能不會和別的進程產生不可思議的相互作用,但是,如果引用了已保護的存儲區(qū)、不存在的存儲區(qū)、或者映射到IO存儲區(qū)的話,程序將會迅速死掉。拿車鑰匙的賊還是賦拿車鑰匙的賊還是賦很奇怪有些程序員,他們從不引用不屬于地們自己的存儲空間。但他們卻覺得編寫象下面Fr
8、eeWindowsTree例程這樣的代碼是很正確的:voidFreeWindowsTree(windowspwndRoot)if(pwndRoot!=NULL)windowpwnd釋放pwndRoot的子窗口……f(pwnd=pwndRootpwndChildpwnd!=NULLpwnd=pwndpwndSibling)FreeWindowTree(pwnd)if(pwndRootstrWndTitle!=NULL)FreeMemy(p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論