UNIX/Linux下C語言的學習路線。
1、工具篇
「公欲善其事,必先利其器」。編程是一門實踐性很強的工做,在你之後的學習或工做中,你將經常會與如下工具打交道, 下面列出學習C語言編程經常用到的軟件和工具。
一、操做系統
在UNIX或Linux系統中學習C很方便,因此在開始您的學習旅程前請先選擇一個UNIX或Linux操做系統,目前可供我的無償使用的UNIX或Linux系統有FreeBSD、RedHat Linux、SUSE Linux等,並且在安裝包中還提供不少實用的工具,如:gcc, make等。
若是您一直使用Windows,身邊又沒有多餘的機器安裝UNIX,則可使用VMware,經過VMware安裝虛擬系統。
二、編譯工具
目前絕大多數Unix或Lnux系統都提供CC或GCC編譯器,最簡單的cc命令格式以下:
cc -o hello hello.c
在unix shell環境中敲入上面的代碼會將hello.c程序編譯成可執行文件hello。
三、make工具
如 GNU make、System V make 和 Berkeley make 是用來組織應用程序編譯過程的基本工具,可是每一個 make 工具之間又有所不一樣。
大部分UNIX和Linux程序都是經過運行make來編譯的。
make工具會讀取一個包含指令的文件(這個文件的名字一般都是 makefile 或 Makefile,不事後文中咱們統一稱之爲 「makefile」),並執行各類操做來編譯程序。
四、調試工具
最簡單的調試工具:爲你的程序添加打印語句,在你對程序的運行機制有了必定的瞭解後,你能夠實用一些工具幫助你進行調試,固然你得學習一下這些工具得使用,如:dbx,gdb等。
還有一些內存工具能夠幫你查找內存泄漏或緩衝區溢出等一些問題,如:memwatch,yamd等。
五、其餘工具
1)vi或vim
Unix下文本編輯器。主要靠一堆命令來編輯文本文件,學Unix編程最好熟悉並熟練使用vi編輯器。
固然在實際工做中,你可能須要一個集成編碼環境或一個功能強大的圖形化編輯工具。
提供一箇中文的vim在線手冊:http://vcd.gro.clinux.org/
2)Secure shell/putty
一個支持ssh協議得客戶端工具,多數狀況下用來鏈接linux系統。
2、書籍篇
「書是人類進步得階梯」。學習一門新的知識,固然要選擇幾本適合本身得書籍,下面介紹一些我本身學習C語言使用過的書籍:
1.《C primer plus》
推薦理由:適合做爲入門書和基本函數查詢得參考資料。本書最新版爲第五版,以ANSI C99爲標準詳細介紹了C語言。
2.《The C programming_Language》
推薦理由:C語言之父得做品權威性毋庸置疑。雖然書籍出版時間比較老,好像也沒更新,不過仍不失爲經典書籍,網上有這本書得英文電子版提供下載。
3.《C 專家編程》
推薦理由:本書能夠幫助有必定經驗的C程序員成爲C編程方面的專家,最關鍵的是本書寓教於樂,讓你充分享受編程的樂趣。
4.《C缺陷與陷阱》
推薦理由:書中所揭示的知識能幫助您繞過C語言自身得陷阱和缺陷,減小代碼中許多常見的Bug。
5.《unix環境高級編程》
推薦理由:既然是UNIX環境下C編程,就不得不說說UNIX編程書籍。
Stevens先生的《unix環境高級編程》是我竭力推薦的,也是個人案頭必備(若是對網絡編程有興趣的,能夠學習一下Stevens先生的《UNIX網絡編程》兩卷,若是以爲還不過癮,能夠再看看《TCP/IP詳解》三卷)。
6.《計算機編程藝術》
推薦理由:算法大師得嘔心瀝血之做。計劃出版五卷書,目前好像已出版3卷。對算法有興趣得能夠研究一下。
3、過程篇
1.學習C語法
語法的學習對於一個具備編程底子的來講,就很輕鬆了;即便你之前沒有學習過其餘編程語言,我相信有2個星期,你也能輕鬆搞定。
須要注意的是,不要太糾纏於語言的細節,好比:運算符優先級與結合性的問題等。
2.學習C標準庫
ANSI C庫把函數分爲不一樣的組,每一個組都具備與之相關的頭文件。C語言標準庫相對於其餘語言,好比C++,Java來講是很是短小精悍的,但首先應着重對如下庫進行學習:
ctype.h:字符處理
math.h:數學庫
stdio.h:標準I/O庫
stdlib.h:通用工具庫
string.h:字符串處理
time.h:時間和日期
若是想了解完成的ANSI C庫,你能夠購買相關的書籍,這些書籍通常會詳細介紹每一個函數的用戶和一些注意點;固然你也能夠登錄http://www.dinkumware.com/manual ... amp;page=index.html獲取ANSI C庫詳細信息。
3.攻克C的難點
1)C語言聲明:
C語言的聲明確實讓我以爲恐怖,比較晦澀難懂,並且聲明的形式和使用的形式還相似。好比以下的聲明恐怕就連不少熟悉C多年的程序員也不是一眼就能看出來的:
char * const * (*next)();
那麼有沒有一種好的記憶方法或規則來搞清楚呢,好像沒有,若是有的話也不是這樣折磨人了。不過能夠看看《C專家編程》第三章的內容,或許你會有所收穫。
也只能多學多練了,所謂熟能生巧嘛,但願這個問題不要在你的心靈上留下陰影。
2)數組與指針:
數組與指針的關係,在標準中並無做很詳細的規定,並且好多C入門的書籍在這個問題上並無給出很詳細的說明,因此會給人形成不少誤解。
對於這個問題,你能夠參考《C缺陷與陷阱》4.5節和《C專家編程》第4,9,10章,相信你這裏面的內容搞透徹,之後就不會再被這個問題搞迷惑。
3)指針與內存:
若是你之後編寫規模較大的程序,你可能發現這個問題可能會是你最大的煩惱,並且可能會是你消耗最多調試時間的事項。
4)C版本的問題:
你得特別當心該問題,最好不要在你的程序中混合使用不一樣版本C的特性,不然會給你帶來很迷惑的問題。若是必定要用,你最好清楚本身在作什麼。
還有一些其餘C中的難點和容易錯誤的地方,能夠學習前人的一些經驗。如下是一個c FAQ的連接地址,相信在這篇文檔中有你須要的大部分問題的解決方法。
http://c-faq-chn.sourceforge.net/
4. UNIX環境編程
學習了以上內容以後,我相信,你就能夠進行unix環境編程了。不過你可能須要對操做系統理論有一點點的瞭解,這樣學起來會比較輕鬆一些。
Unix環境編程,你應該着重IO和進程兩大塊內容。
《Unix環境高級編程》中對Unix環境編程有着很是詳細且深刻的論述,並且書中有大量實用性例子程序,不過可能得花上幾個月得時間,好好啃一啃了。
在紮實掌握以上內容,不表明你得C語言學習支路已經完成,相反,纔剛剛開始。之後你須要用學到得知識去解決大量不一樣實際問題,在不斷得實踐過程當中,你會近一步加深對C的理解。有了以上基礎以後,你會發現,在實踐過程當中須要的其餘知識,你會很是快速的掌握。html