鍍金池/ 教程/ C/ 練習(xí)0:準(zhǔn)備
練習(xí)9:數(shù)組和字符串
練習(xí)6:變量類型
練習(xí)3:格式化輸出
練習(xí)4:Valgrind 介紹
練習(xí)28:Makefile 進(jìn)階
練習(xí)14:編寫并使用函數(shù)
練習(xí)21:高級(jí)數(shù)據(jù)類型和控制結(jié)構(gòu)
練習(xí)20:Zed的強(qiáng)大的調(diào)試宏
練習(xí)18:函數(shù)指針
練習(xí)0:準(zhǔn)備
練習(xí)15:指針,可怕的指針
練習(xí)27:創(chuàng)造性和防御性編程
練習(xí)22:棧、作用域和全局
練習(xí)10:字符串?dāng)?shù)組和循環(huán)
練習(xí)8:大小和數(shù)組
練習(xí)16:結(jié)構(gòu)體和指向它們的指針
練習(xí)7:更多變量和一些算術(shù)
練習(xí)23:認(rèn)識(shí)達(dá)夫設(shè)備
練習(xí)12:If,Else If,Else
練習(xí)2:用Make來(lái)代替Python
練習(xí)1:?jiǎn)⒂镁幾g器
練習(xí)11:While循環(huán)和布爾表達(dá)式
練習(xí)5:一個(gè)C程序的結(jié)構(gòu)
練習(xí)24:輸入輸出和文件
練習(xí)25:變參函數(shù)
練習(xí)13:Switch語(yǔ)句
練習(xí)19:一個(gè)簡(jiǎn)單的對(duì)象系統(tǒng)
練習(xí)26:編寫第一個(gè)真正的程序
導(dǎo)言:C的笛卡爾之夢(mèng)
練習(xí)17:堆和棧的內(nèi)存分配

練習(xí)0:準(zhǔn)備

在這一章中,你將為C語(yǔ)言編程配置好你的系統(tǒng)。一個(gè)好消息是對(duì)于所有使用Linux或者M(jìn)ac的人,你的系統(tǒng)是為C語(yǔ)言編程而設(shè)計(jì)的。C語(yǔ)言的創(chuàng)造者也對(duì)Unix操作系統(tǒng)的創(chuàng)造做出了貢獻(xiàn),并且Linux和OSX都是基于Unix的。事實(shí)上,安裝工作會(huì)非常簡(jiǎn)單。

對(duì)于Windows上的用戶,我有一個(gè)壞消息:在Windows上學(xué)習(xí)C非常痛苦。你可以在Windows上編寫C代碼,這并不是問(wèn)題。問(wèn)題是所有的庫(kù)、函數(shù)和工具都和其它的C語(yǔ)言環(huán)境有些詫異。C來(lái)自于Unix,并且和Unix平臺(tái)配合得比較好??峙逻@是一個(gè)你并不能接受的事實(shí)。

然而你并不需要為此恐慌。我并不是說(shuō)要完全避免Windows。然而我說(shuō)的是,如果你打算已最短的時(shí)間來(lái)學(xué)習(xí)C,你需要接觸Unix并適應(yīng)它。這同時(shí)也對(duì)你有幫助,因?yàn)槎靡恍︰nix的知識(shí),也會(huì)讓你懂得一些C編程的習(xí)慣,以及擴(kuò)充你的技能。

這也意味著每個(gè)人都需要使用命令行。嗯,就是這樣。你將會(huì)進(jìn)入命令行并且鍵入一些命令。不要為此感到害怕,因?yàn)槲視?huì)告訴你要鍵入什么,以及結(jié)果應(yīng)該是什么樣子,所以你實(shí)際上會(huì)學(xué)到很多東西,同時(shí)擴(kuò)充自己的技能。

Linux

在多數(shù)Linux系統(tǒng)上你都需要安裝一些包。對(duì)于基于Debian的系統(tǒng),例如Ubuntu你需要使用下列命令來(lái)安裝一些東西:

$ sudo apt-get install build-essential

上面是命令行提示符的一個(gè)示例。你需要接觸到能輸入它的地方,找到你的“終端”程序并且運(yùn)行它。接著,你會(huì)看到一個(gè)類似于$的Shell提示符,并且你可以在里面鍵入命令。不要鍵入$,而是它后面的東西。

下面是在基于RPM的Linux系統(tǒng),例如Fedora中執(zhí)行相同安裝工作的方法:

$ su -c "yum groupinstall development-tools"

一旦你運(yùn)行了它,它會(huì)正常工作,你應(yīng)該能夠做本書的第一個(gè)練習(xí)。如果不能請(qǐng)告訴我。

Mac OSX

在 Mac OSX上,安裝工作會(huì)更簡(jiǎn)單。首先,你需要從蘋果官網(wǎng)下載最新的XCode,或者找到你的安裝DVD并從中安裝。需要下載的文件很大,要花費(fèi)很長(zhǎng)時(shí)間,所以我推薦你從DVD安裝。同時(shí),上網(wǎng)搜索“安裝xcode”來(lái)指導(dǎo)你來(lái)安裝它。

一旦你安裝完XCode,可能需要重啟你的電腦。你可以找到你的中斷程序并且將它放到快捷啟動(dòng)欄中。在本書中你會(huì)經(jīng)常用到中斷,所以最好將它放到順手的區(qū)域。

Windows

對(duì)于Windows用戶,你需要在虛擬機(jī)中安裝并運(yùn)行一個(gè)基本的Ubuntu Linux系統(tǒng),來(lái)做本書的練習(xí),并且避免任何Windows中安裝的問(wèn)題。

譯者注:如果你的Windows版本是Win10 14316及之后的版本,可以開(kāi)啟Ubuntu子系統(tǒng)來(lái)獲取Linux環(huán)境。

文本編輯器

對(duì)于程序員來(lái)說(shuō),文本編輯器的選擇有些困難。對(duì)于初學(xué)者我推薦他們使用Gedit,因?yàn)樗芎?jiǎn)單,并且可以用于編寫代碼。然而,它在特定的國(guó)際化環(huán)境中并不能正常工作。如果你已經(jīng)是老司機(jī)的話,你可以選用你最喜歡的編輯器。

出于這種考慮,我打算讓你嘗試一些你所在平臺(tái)上的標(biāo)準(zhǔn)的用于編程的文本編輯器,并且長(zhǎng)期使用其中你最喜歡的一個(gè)。如果你已經(jīng)用了Gedit并且很喜歡他,那么久一致用下去。如果你打算嘗試一些不同的編輯器,則趕快嘗試并選擇一個(gè)。

最重要的事情是,不要糾結(jié)于尋找最完美的編輯器。文本編輯器幾乎都很奇怪,你只需要選擇一個(gè)并熟悉它,如果你發(fā)現(xiàn)喜歡別的編輯器可以切換到它。不要在挑選它和把它變得更好上面花很多時(shí)間。

這是亦可以嘗試的一些編輯器:

每個(gè)人都可能選擇一款不同的編輯器,這些只是一部分人所選擇的開(kāi)源編輯器。在找到你最喜歡的那個(gè)之前,嘗試其中的一些,甚至是一些商業(yè)編輯器。

警告:不要使用IDE

IDE,或者“集成開(kāi)發(fā)工具”,會(huì)使你變笨。如果你想要成為一個(gè)好的程序員,它會(huì)是最糟糕的工具,因?yàn)樗[藏了背后的細(xì)節(jié),你的工作是弄清楚背后發(fā)生了什么。如果你試著完成一些事情,并且所在平臺(tái)根據(jù)特定的IDE而設(shè)計(jì),它們非常有用,但是對(duì)于學(xué)習(xí)C編程(以及許多其它語(yǔ)言),它們沒(méi)有意義。

如果你玩過(guò)吉他,你應(yīng)該知道TAB是什么。但是對(duì)于其它人,讓我對(duì)其做個(gè)解釋。在音樂(lè)中有一種樂(lè)譜叫做“五線譜”。它是通用、非常古老的樂(lè)譜,以一種通用的方法來(lái)記下其它人應(yīng)該在樂(lè)器上彈奏的音符。如果你彈過(guò)鋼琴,這種樂(lè)譜非常易于使用,因?yàn)樗鼛缀蹙褪菫殇撉俸徒豁憳?lè)發(fā)明的。

然而吉他是一種奇怪的樂(lè)器,它并不能很好地適用這種樂(lè)譜。所以吉他手通常使用一種叫做TAB(tablature)的樂(lè)譜。它所做的不是告訴你該彈奏哪個(gè)音符,而是在當(dāng)時(shí)應(yīng)該撥哪根弦。你完全可以在不知道所彈奏的單個(gè)音符的情況下學(xué)習(xí)整首樂(lè)曲,許多人也都是這么做的,但是如果你想知道你彈的是什么,TAB是毫無(wú)意義的。

傳統(tǒng)的樂(lè)譜可能比TAB更難一些,但是會(huì)告訴你如何演奏音樂(lè),而不是如果玩吉他。通過(guò)傳統(tǒng)的樂(lè)譜我可以在鋼琴上,或者在貝斯上彈奏相同的曲子。我也可以將它放到電腦中,為它設(shè)計(jì)全部的曲譜。但是通過(guò)TAB我只能在吉他上彈奏。

IDE就像是TAB,你可以用它非??焖俚鼐幊?,但是你只能夠用一種語(yǔ)言在一個(gè)平臺(tái)上編程。這就是公司喜歡將它賣給你的原因。它們知道你比較懶,并且由于它只適用于它們自己的平臺(tái),他們就將你鎖定在了那個(gè)平臺(tái)上。

打破這一循環(huán)的版本就是不用IDE學(xué)習(xí)編程。一個(gè)普通的文本編輯器,或者一個(gè)程序員使用的文本編輯器,例如Vim或者Emacs,能讓你更熟悉代碼。這有一點(diǎn)點(diǎn)困難,但是終結(jié)果是你將會(huì)熟悉任何代碼,在任何計(jì)算機(jī)上,以任何語(yǔ)言,并且懂得背后的原理。

譯者注:和Python不同,使用編輯器和命令行編寫并編譯C語(yǔ)言存在依賴配置問(wèn)題。對(duì)于Python這種腳本語(yǔ)言,項(xiàng)目中文件之間的所有依賴都存在于代碼中,命令行中只需要運(yùn)行Python,解釋器便于自動(dòng)加載依賴。但是在C的Makefile中你需要手動(dòng)配置.c文件的依賴,如果文件多于5個(gè)會(huì)非常麻煩。對(duì)此你需要找到一種通用的解決方案,或者還是直接使用IDE。