亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 怎樣讀代碼? [打印本頁]

作者: hauto    時間: 2009-10-05 11:15
標(biāo)題: 怎樣讀代碼?
做程序必不可少的是要讀代碼,可是怎樣讀代碼呢?
你為什么要讀代碼?
A.了解功能是怎樣實現(xiàn)的  B.提高代碼閱讀能力,進(jìn)一步提高編程能力
方法:
1.首先要了解你所讀的代碼要實現(xiàn)的功能?
2.你能在現(xiàn)有的環(huán)境下編譯運(yùn)行嗎?
3.嘗試調(diào)試
調(diào)試時,調(diào)用棧很重要,通過調(diào)用棧,你可以了解程序的執(zhí)行流程。
具體代碼的閱讀
1.文件  
了解閱讀代碼的組織方式,哪些文件實現(xiàn)怎樣的功能?
代碼是怎樣的風(fēng)格?
2.函數(shù)
對于短函數(shù),不必了解過多,一般功能簡單,可以直接看
長函數(shù),一般由好幾個短函數(shù)組成,首先了解短函數(shù)實現(xiàn)的功能,再了解長函數(shù)?
有些函數(shù)可以通過函數(shù)名來了解函數(shù)功能,可以跳過,若感覺奇怪可以回頭再看
適當(dāng)跳過一些錯誤處理,專心看正常流程,不要被細(xì)枝末節(jié)耽誤了
人的智力是有限的,每次只能處理一件事情,可以從不同層次上看問題,記住函數(shù)實現(xiàn)的
功能,了解大的程序是如何由小模塊組合起來的。然后,小模塊又是怎樣實現(xiàn)功能的。
除非你想了解其中的小模塊的功能實現(xiàn),否則只要了解該模塊實現(xiàn)的功能就可以了。人的
智力和記憶力是有限的。我們做事情的時候要專心的做好要做的事情,不要考慮太多的。例如可以
在總體上考慮,得出一個計劃,然后按照計劃執(zhí)行,并且根據(jù)執(zhí)行的情況和當(dāng)前的實際調(diào)整
計劃。當(dāng)執(zhí)行的時候不需要也沒有精力考慮計劃的變化,我們所要做的就是把當(dāng)前要做的事情
做好就可以了。
借助一些工具來看代碼,如sourceinsight vim+ctags+cscope等。
可以看看網(wǎng)上有沒有讀代碼的心得什么的。
3.具體細(xì)節(jié)問題
變量要了解其代表的意義,有意義的東西才容易理解記憶。
數(shù)組要了解其下表表示什么,其元素值是什么意思。
循環(huán)語句了解循環(huán)的初始狀態(tài)是什么,狀態(tài)怎樣變化,結(jié)束條件是什么,
在每一步都實現(xiàn)了怎樣的功能。
判斷語句了解判斷條件是什么意思,還有在不同情況下處理方式有哪些不同。
c語言函數(shù)指針,這個一般出現(xiàn)在結(jié)構(gòu)體中,這些函數(shù)指針起到c++中虛函數(shù),一般在初始化時,會賦值。
4.有時候會突然想要了解一個函數(shù)的具體實現(xiàn),怎樣找到這個函數(shù)?
A.首先用代碼閱讀工具來找,通常代碼閱讀工具都能夠找到
B.在有些情況下代碼閱讀工具找不到:如奇怪的宏定義,符號連接##語法,特殊前綴。
對于這些特殊的語法,可以考慮用硬搜索的方法,或者猜測。一旦了解了各個文件都實行
了怎樣的功能,我們就可以猜測函數(shù)可能在哪里實行,到具體的文件中找要容易一些。
隱藏在函數(shù)接口背后的?
一般通過函數(shù)名和函數(shù)參數(shù)可以猜測函數(shù)功能。然而有些東西看不到,如:
A.static extern 變量
B.結(jié)構(gòu)體變量,結(jié)構(gòu)體變量通常元素較多,很難了解所有的元素意義,并且當(dāng)前函數(shù)可
能只用到其中的幾個元素,且當(dāng)前結(jié)構(gòu)體中的某些元素還沒有初值,有值也是沒有意義的。如果元素
包含指針,該指針指向其他的結(jié)構(gòu)體,那么有需要了解他指向的結(jié)構(gòu)體。我們需要的就是,
根據(jù)函數(shù)用到的那些元素,補(bǔ)全函數(shù)接口。
了解函數(shù)變量的作用域可以了解函數(shù)或變量的影響力
舍棄的重要性
對于大函數(shù),閱讀時一定要注意舍棄小函數(shù)的閱讀,只要該小函數(shù)不影響閱讀,可以直接跳過,如果
不這樣做,將耗費(fèi)大量的腦力,而且效果不好

本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u1/36646/showart_2064310.html




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2