歡迎來到培訓(xùn)無憂網(wǎng)!

全國切換

咨詢熱線 400-001-5729

位置:培訓(xùn)無憂網(wǎng) > 新聞資訊 > 電腦/IT > c語言 >  C語言知識的學(xué)習(xí)建議

C語言知識的學(xué)習(xí)建議

來源:培訓(xùn)無憂網(wǎng) 發(fā)布人:云朵

2022-01-30 11:06:27|已瀏覽:3046次

C語言知識的學(xué)習(xí)建議

01、排版問題

      程序是一種出版物。意味著程序員們會先閱讀,最后才輪到機(jī)器。機(jī)器的快樂就是程序能編譯,機(jī)器才不在乎程序?qū)懙挠卸嗝雌,可是人們?yīng)該保持程序的美觀。有時(shí)人們會過度關(guān)心:用漂亮的打印機(jī)呆板地打印出漂亮的輸出,而這些輸出只是將所有介詞用英文文本以粗體字體凸顯出來,都是些與程序無關(guān)的細(xì)節(jié)。雖然有很多人認(rèn)為程序就應(yīng)該像 Algol.68 所描述的一樣(有些系統(tǒng)甚至要求照搬該風(fēng)格編寫程序),可清晰的程序不會因?yàn)檫@樣的呈現(xiàn)而變得更清晰,只會使糟糕的程序變得更可笑。

      對于清晰的程序來說,排版規(guī)范一向都是至關(guān)重要的。當(dāng)然,眾所周知最有用的是縮進(jìn),但是當(dāng)墨水遮蓋了意圖時(shí),就會控制住排版。因此即便堅(jiān)持使用簡單的舊打字機(jī)輸出,也該意識到愚蠢的排版。避免過度修飾,比如保持注釋的簡潔和靈活。通過程序整齊一致地說出想表達(dá)的。接著往下看。

02、變量命名

      對于變量名稱,長度并不是名稱的價(jià)值所在,清晰的表達(dá)才是。不常用的全局變量可能會有一個(gè)很長的名稱,像 maxphysaddr。在循環(huán)中每一行所使用的數(shù)組索引,并不需要取一個(gè)比 i 更詳盡的名字。取 index 或者 elementnumber 會輸入更多的字母(或調(diào)用文本編輯器),并且會遮蓋住計(jì)算的細(xì)節(jié)。當(dāng)變量名稱很長時(shí),很難明白發(fā)生了什么。

03、指針的使用

      C語言不同尋常,因?yàn)樗试S指針指向任何事物。指針是鋒利的工具,像任何這樣的工具一樣,使用得當(dāng)可以產(chǎn)生令人愉悅的生產(chǎn)力,但使用不當(dāng)也可以造成極大的破壞。指針在學(xué)術(shù)界的名聲不太好,因?yàn)樗kU(xiǎn)了,莫名其妙地就變得糟糕的不行。但我認(rèn)為它是強(qiáng)大的符號,它可以幫助我們清楚地自我表達(dá)。

04、過程名稱

      過程名稱應(yīng)該表明它們是做什么的,函數(shù)名稱應(yīng)該表明它們返回什么。函數(shù)通常在像 if 這樣的表達(dá)式使用,因此可讀性要好。

05、注釋

      這一個(gè)微妙的問題,需要自己體會和判斷。由于一些原因,我傾向于寧可清除注釋。第一,假如代碼清晰,并且使用了規(guī)范的類型名稱和變量名稱,應(yīng)該從代碼本身就可以理解。第二,編譯器不能檢查注釋,因此不能保證準(zhǔn)確,特別是代碼修改過以后。誤導(dǎo)性的注釋會非常令人困惑。第三,排版問題:注釋會使代碼變得雜亂。

      但有時(shí)我會寫注釋,像下文一樣僅僅只是把它們用于介紹。例如:解釋全局變量的使用和類型(我總是在龐大的程序中寫注釋);作為一個(gè)不尋;蛘哧P(guān)鍵過程的介紹;或標(biāo)記出大規(guī)模計(jì)算的一節(jié)。

06、復(fù)雜度

      許多程序過于復(fù)雜,比需要有效解決的問題更加復(fù)雜。這是為什么呢?大部分是由于設(shè)計(jì)不好,但我會跳過這個(gè)問題,因?yàn)檫@個(gè)問題太大了。然而程序往往在微觀層面就很復(fù)雜,有關(guān)這些可以在這里解決。

      ▪ 規(guī)則 1:不要斷定程序會在什么地方耗費(fèi)運(yùn)行時(shí)間。瓶頸總是出現(xiàn)在令人意想不到的地方,直到證實(shí)瓶頸在哪,不要試圖再次猜測并加快運(yùn)行速度。

      ▪ 規(guī)則 2:估量(measure) 在沒有對代碼做出估量之前不要優(yōu)化速度,除非發(fā)現(xiàn)最耗時(shí)的那部分代碼,要不也不要去做。

      ▪ 規(guī)則 3:當(dāng) n 很小時(shí)(通常也很。ㄉ诘乃惴ㄟ\(yùn)行很慢;ㄉ谒惴ㄓ泻艽蟮某(shù)級別復(fù)雜度。在你確定 n 總是很大之前, 不要使用花哨算法。(即使假如 n 變大,也優(yōu)先使用規(guī)則 2).例如,對于常見問題,二叉樹總比伸展樹高效。

      ▪ 規(guī)則 4:花哨的算法比簡單的算法更容易有 bug,而且實(shí)現(xiàn)起來也更困難 盡量使用簡單的算法與簡單的數(shù)據(jù)結(jié)構(gòu)。

以下幾乎是所有實(shí)際程序中用到的數(shù)據(jù)結(jié)構(gòu):

      ▪ 數(shù)組

      ▪ 鏈表

      ▪ 哈希表

      ▪ 二叉樹

      當(dāng)然也必須要有把這些數(shù)據(jù)結(jié)構(gòu)靈活結(jié)合的準(zhǔn)備,比如用哈希表實(shí)現(xiàn)的符號表,其中哈希表是由字符型數(shù)組組成的鏈表。

      ▪ 規(guī)則 5:以數(shù)據(jù)為核心 如果選擇了適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)并把一切都組織得很有條理性,算法總是不言而喻的。編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法。(參考 Brooks p. 102)

      ▪ 規(guī)則 6:就是沒有規(guī)則 6。

07、數(shù)據(jù)編程

      不像許多 if 語句,算法或算法的細(xì)節(jié)通常以緊湊、高效和明確的數(shù)據(jù)進(jìn)行編碼。眼前的工作可以編碼,歸根到底是由于其復(fù)雜性都是由不相干的細(xì)節(jié)組合而成。分析表是典型例子,它通過一種解析固定、簡單代碼段的形式,對編程語言的語法進(jìn)行編碼。有限狀態(tài)機(jī)特別適合這種處理形式,但是幾乎任何涉及到對構(gòu)建數(shù)據(jù)驅(qū)動算法有益的程序,都是將某些抽象數(shù)據(jù)類型的輸入“解析”成序列,序列會由一些獨(dú)立“動作”構(gòu)成。

      也許這種設(shè)計(jì)最有趣的地方是表結(jié)構(gòu)有時(shí)可以由另一個(gè)程序生成(經(jīng)典案例是解析生成器)。有個(gè)更接地氣的例子,假如操作系統(tǒng)是由一組表驅(qū)動,這組表包含連接 I/O 請求到相應(yīng)設(shè)備驅(qū)動的操作,那么可以通過程序“配置“系統(tǒng),該程序可以讀取到某些特殊設(shè)備與可疑機(jī)器連接的描述,并打印相應(yīng)的表。

      數(shù)據(jù)驅(qū)動程序在初學(xué)者中不常見的原因之一是由于 Pascal 的專制。Pascal 像它的創(chuàng)始人一樣,堅(jiān)信代碼要和數(shù)據(jù)分開。因而(至少在原始形式上)無法創(chuàng)建初始化的數(shù)據(jù)。與圖靈和馮諾依曼的理論背道而馳,這些理論可都是定義存儲計(jì)算機(jī)的基本原理。代碼和數(shù)據(jù)是一樣的,或至少可以算是。還能怎樣解釋編譯器的工作原理呢?(函數(shù)式語言對 I/O 也有類似的問題)

08、函數(shù)指針

      Pascal 專制的另一個(gè)結(jié)果是初學(xué)者不使用函數(shù)指針。(在 Pascal 中沒有把函數(shù)作為變量) 用函數(shù)指針來處理編碼復(fù)雜度會有一些令人感興趣的地方。

      指針指向的程序有一定的復(fù)雜度。這些程序必須遵守一些標(biāo)準(zhǔn)協(xié)議,像要求一組都是相同調(diào)用的程序就是其中之一。除此之外,所要實(shí)現(xiàn)的只是完成業(yè)務(wù),復(fù)雜度是分散的。

      有個(gè)協(xié)議的主張是既然所有使用的功能相似,那么它們的行為也必須相似。這對簡單的文檔、測試、程序擴(kuò)展和甚至使程序通過網(wǎng)絡(luò)分布都有幫助——遠(yuǎn)程過程調(diào)用可以通過該協(xié)議進(jìn)行編碼。

      我認(rèn)為面相對象編程的核心是清晰使用函數(shù)指針。規(guī)定好要對數(shù)據(jù)執(zhí)行的一系列操作,以及對這些操作響應(yīng)的整套數(shù)據(jù)類型。將程序合攏到一起最簡單的方法是為每種類型使用一組函數(shù)指針。簡而言之,就是定義類和方法。當(dāng)然,面向?qū)ο笳Z言提供了更多更漂亮的語法、派生類型等等,但在概念上幾乎沒有提出額外的東西。

      數(shù)據(jù)驅(qū)動程序與函數(shù)指針的結(jié)合,變成了一種表現(xiàn)令人驚訝的工作方法。根據(jù)我的經(jīng)驗(yàn),這種方法經(jīng)常會產(chǎn)生驚喜的結(jié)果。即使沒有面向?qū)ο笳Z言,無需額外的工作也可以獲得 90% 的好處,并且能更好地管理結(jié)果。我無法再推薦出更高標(biāo)準(zhǔn)的實(shí)現(xiàn)方式。我所有的程序都是由這種方式組織管理,而且經(jīng)過多次開發(fā)后都相安無事——遠(yuǎn)遠(yuǎn)優(yōu)于缺少約束的方法。也許正如所說:從長遠(yuǎn)來看,約束會帶來豐厚的回報(bào)。

      注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://m.universityresearchassociates.com/news-id-19377.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實(shí)性請自行核實(shí)或聯(lián)系我們,了解更多相關(guān)資訊請關(guān)注c語言頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費(fèi)申請?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會一對一幫助你規(guī)劃更適合你的專業(yè)課程!
  • 姓名:

  • 手機(jī):

  • 地區(qū):

  • 想學(xué)什么:

  • 培訓(xùn)無憂網(wǎng)
免 費(fèi) 申 請 試 聽
提交申請,《培訓(xùn)無憂網(wǎng)》課程顧問老師會一對一幫助你規(guī)劃更適合你的專業(yè)課程!