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