# 練習0:準備
> 原文:[Exercise 0: The Setup](http://c.learncodethehardway.org/book/ex0.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
在這一章中,你將為C語言編程配置好你的系統。一個好消息是對于所有使用Linux或者Mac的人,你的系統是為C語言編程而設計的。C語言的創造者也對Unix操作系統的創造做出了貢獻,并且Linux和OSX都是基于Unix的。事實上,安裝工作會非常簡單。
對于Windows上的用戶,我有一個壞消息:在Windows上學習C非常痛苦。你可以在Windows上編寫C代碼,這并不是問題。問題是所有的庫、函數和工具都和其它的C語言環境有些詫異。C來自于Unix,并且和Unix平臺配合得比較好。恐怕這是一個你并不能接受的事實。
然而你并不需要為此恐慌。我并不是說要完全避免Windows。然而我說的是,如果你打算已最短的時間來學習C,你需要接觸Unix并適應它。這同時也對你有幫助,因為懂得一些Unix的知識,也會讓你懂得一些C編程的習慣,以及擴充你的技能。
這也意味著每個人都需要使用命令行。嗯,就是這樣。你將會進入命令行并且鍵入一些命令。不要為此感到害怕,因為我會告訴你要鍵入什么,以及結果應該是什么樣子,所以你實際上會學到很多東西,同時擴充自己的技能。
## Linux
在多數Linux系統上你都需要安裝一些包。對于基于Debian的系統,例如Ubuntu你需要使用下列命令來安裝一些東西:
```
$ sudo apt-get install build-essential
```
上面是命令行提示符的一個示例。你需要接觸到能輸入它的地方,找到你的“終端”程序并且運行它。接著,你會看到一個類似于`$`的Shell提示符,并且你可以在里面鍵入命令。不要鍵入`$`,而是它后面的東西。
下面是在基于RPM的Linux系統,例如Fedora中執行相同安裝工作的方法:
```
$ su -c "yum groupinstall development-tools"
```
一旦你運行了它,它會正常工作,你應該能夠做本書的第一個練習。如果不能請告訴我。
## Mac OSX
在 Mac OSX上,安裝工作會更簡單。首先,你需要從蘋果官網下載最新的`XCode`,或者找到你的安裝DVD并從中安裝。需要下載的文件很大,要花費很長時間,所以我推薦你從DVD安裝。同時,上網搜索“安裝xcode”來指導你來安裝它。
一旦你安裝完XCode,可能需要重啟你的電腦。你可以找到你的中斷程序并且將它放到快捷啟動欄中。在本書中你會經常用到中斷,所以最好將它放到順手的區域。
## Windows
對于Windows用戶,你需要在虛擬機中安裝并運行一個基本的Ubuntu Linux系統,來做本書的練習,并且避免任何Windows中安裝的問題。
> 譯者注:如果你的Windows版本是Win10 14316及之后的版本,可以開啟Ubuntu子系統來獲取Linux環境。
## 文本編輯器
對于程序員來說,文本編輯器的選擇有些困難。對于初學者我推薦他們使用[`Gedit`](http://projects.gnome.org/gedit/),因為它很簡單,并且可以用于編寫代碼。然而,它在特定的國際化環境中并不能正常工作。如果你已經是老司機的話,你可以選用你最喜歡的編輯器。
出于這種考慮,我打算讓你嘗試一些你所在平臺上的標準的用于編程的文本編輯器,并且長期使用其中你最喜歡的一個。如果你已經用了Gedit并且很喜歡他,那么久一致用下去。如果你打算嘗試一些不同的編輯器,則趕快嘗試并選擇一個。
最重要的事情是,不要糾結于尋找最完美的編輯器。文本編輯器幾乎都很奇怪,你只需要選擇一個并熟悉它,如果你發現喜歡別的編輯器可以切換到它。不要在挑選它和把它變得更好上面花很多時間。
這是亦可以嘗試的一些編輯器:
+ Linux和OSX上的[`Gedit`](http://projects.gnome.org/gedit/)。
+ OSX上的[`TextWrangler`](http://www.barebones.com/products/textwrangler/)。
+ 可以在終端中運行并幾乎在任何地方工作的[`Nano`](http://www.nano-editor.org/)。
+ [`Emacs`](http://www.gnu.org/software/emacs/)和[`Emacs OSX`](http://emacsformacosx.com/)。需要學習一些東西。
+ [`Vim`](http://www.vim.org/)和[`Mac Vim`](http://code.google.com/p/macvim/)。
每個人都可能選擇一款不同的編輯器,這些只是一部分人所選擇的開源編輯器。在找到你最喜歡的那個之前,嘗試其中的一些,甚至是一些商業編輯器。
## 警告:不要使用IDE
IDE,或者“集成開發工具”,會使你變笨。如果你想要成為一個好的程序員,它會是最糟糕的工具,因為它隱藏了背后的細節,你的工作是弄清楚背后發生了什么。如果你試著完成一些事情,并且所在平臺根據特定的IDE而設計,它們非常有用,但是對于學習C編程(以及許多其它語言),它們沒有意義。
> 注
> 如果你玩過吉他,你應該知道TAB是什么。但是對于其它人,讓我對其做個解釋。在音樂中有一種樂譜叫做“五線譜”。它是通用、非常古老的樂譜,以一種通用的方法來記下其它人應該在樂器上彈奏的音符。如果你彈過鋼琴,這種樂譜非常易于使用,因為它幾乎就是為鋼琴和交響樂發明的。
> 然而吉他是一種奇怪的樂器,它并不能很好地適用這種樂譜。所以吉他手通常使用一種叫做TAB(tablature)的樂譜。它所做的不是告訴你該彈奏哪個音符,而是在當時應該撥哪根弦。你完全可以在不知道所彈奏的單個音符的情況下學習整首樂曲,許多人也都是這么做的,但是如果你想知道你彈的是什么,TAB是毫無意義的。
> 傳統的樂譜可能比TAB更難一些,但是會告訴你如何演奏音樂,而不是如果玩吉他。通過傳統的樂譜我可以在鋼琴上,或者在貝斯上彈奏相同的曲子。我也可以將它放到電腦中,為它設計全部的曲譜。但是通過TAB我只能在吉他上彈奏。
> IDE就像是TAB,你可以用它非常快速地編程,但是你只能夠用一種語言在一個平臺上編程。這就是公司喜歡將它賣給你的原因。它們知道你比較懶,并且由于它只適用于它們自己的平臺,他們就將你鎖定在了那個平臺上。
> 打破這一循環的版本就是不用IDE學習編程。一個普通的文本編輯器,或者一個程序員使用的文本編輯器,例如Vim或者Emacs,能讓你更熟悉代碼。這有一點點困難,但是終結果是你將會熟悉任何代碼,在任何計算機上,以任何語言,并且懂得背后的原理。
- 笨辦法學C 中文版
- 前言
- 導言:C的笛卡爾之夢
- 練習0:準備
- 練習1:啟用編譯器
- 練習2:用Make來代替Python
- 練習3:格式化輸出
- 練習4:Valgrind 介紹
- 練習5:一個C程序的結構
- 練習6:變量類型
- 練習7:更多變量和一些算術
- 練習8:大小和數組
- 練習9:數組和字符串
- 練習10:字符串數組和循環
- 練習11:While循環和布爾表達式
- 練習12:If,Else If,Else
- 練習13:Switch語句
- 練習14:編寫并使用函數
- 練習15:指針,可怕的指針
- 練習16:結構體和指向它們的指針
- 練習17:堆和棧的內存分配
- 練習18:函數指針
- 練習19:一個簡單的對象系統
- 練習20:Zed的強大的調試宏
- 練習21:高級數據類型和控制結構
- 練習22:棧、作用域和全局
- 練習23:認識達夫設備
- 練習24:輸入輸出和文件
- 練習25:變參函數
- 練習26:編寫第一個真正的程序
- 練習27:創造性和防御性編程
- 練習28:Makefile 進階
- 練習29:庫和鏈接
- 練習30:自動化測試
- 練習31:代碼調試
- 練習32:雙向鏈表
- 練習33:鏈表算法
- 練習34:動態數組
- 練習35:排序和搜索
- 練習36:更安全的字符串
- 練習37:哈希表
- 練習38:哈希算法
- 練習39:字符串算法
- 練習40:二叉搜索樹
- 練習41:將 Cachegrind 和 Callgrind 用于性能調優
- 練習42:棧和隊列
- 練習43:一個簡單的統計引擎
- 練習44:環形緩沖區
- 練習45:一個簡單的TCP/IP客戶端
- 練習46:三叉搜索樹
- 練習47:一個快速的URL路由
- 后記:“解構 K&R C” 已死