1. 程式人生 > >史上最全面的C語言的學習路線及方法

史上最全面的C語言的學習路線及方法

UNIX下C語言的學習路線。
工具篇
“公欲善其事,必先利其器”。程式設計是一門實踐性很強的工作,在你以後的學習或工作中,你將常常會與以下工具打交道, 下面列出學習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.netterm
最著名的網路終端軟體之一,可以使用它方便的連線到主機系統中。



3.Secure shell
一個支援ssh協議得客戶端工具,多數情況下用來連線linux系統。

在學習程式設計的時候會遇到非常多的問題沒人幫你解決,迷茫是正常的,不怕學不會就怕不想學,可以加我的二千人群 487790381,每天直播課分享,實戰專案教學,學習規範的程式碼風格,裡面有很多大神比較熱情的,我也會分享大家一些學習資料和學習視訊


書籍篇
  “書是人類進步得階梯”。學習一門新的知識,當然要選擇幾本適合自己得書籍,下面介紹一些我自己學習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卷。對演算法有興趣得可以研究一下。




過程篇
在學習程式設計的時候會遇到非常多的問題沒人幫你解決,迷茫是正常的,不怕學不會就怕不想學,可以加我的二千人群 487790381,每天直播課分享,實戰專案教學,學習規範的程式碼風格,裡面有很多大神比較熱情的,我也會分享大家一些學習資料和學習視訊

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的難點




C語言宣告:
  C語言的聲明確實讓我覺得恐怖,比較晦澀難懂,而且宣告的形式和使用的形式還類似。比如如下的宣告恐怕就連很多熟悉C多年的程式設計師也不是一眼就能看出來的:
  char * const * (*next)();
  那麼有沒有一種好的記憶方法或規則來搞清楚呢,好像沒有,如果有的話也不是這樣折磨人了。不過可以看看《C專家程式設計》第三章的內容,或許你會有所收穫。
  也只能多學多練了,所謂熟能生巧嘛,希望這個問題不要在你的心靈上留下陰影。



陣列與指標:
  陣列與指標的關係,在標準中並沒有作很詳細的規定,而且好多C入門的書籍在這個問題上並沒有給出很詳細的說明,所以會給人造成很多誤解。
  對於這個問題,你可以參考《C缺陷與陷阱》4.5節和《C專家程式設計》第4,9,10章,相信你這裡面的內容搞透徹,以後就不會再被這個問題搞迷惑。



指標與記憶體:
  如果你以後編寫規模較大的程式,你可能發現這個問題可能會是你最大的煩惱,而且可能會是你消耗最多除錯時間的事項。



 C版本的問題:
  你得特別小心該問題,最好不要在你的程式中混合使用不同版本C的特性,否則會給你帶來很迷惑的問題。如果一定要用,你最好清楚自己在做什麼。
還有一些其他C中的難點和容易錯誤的地方,可以學習前人的一些經驗。以下是一個c FAQ的連結地址,相信在這篇文件中有你需要的大部分問題的解決方法。
http://c-faq-chn.sourceforge.net/
4. UNIX環境程式設計
學習了以上內容之後,我相信,你就可以進行unix環境程式設計了。不過你可能需要對作業系統理論有一點點的瞭解,這樣學起來會比較輕鬆一些。
Unix環境程式設計,你應該著重IO和程序兩大塊內容。《Unix環境高階程式設計》中對Unix環境程式設計有著非常詳細且深入的論述,而且書中有大量實用性例子程式,不過可能得花上幾個月得時間,好好啃一啃了。


在紮實掌握以上內容,不代表你得C語言學習支路已經完成,相反,才剛剛開始。以後你需要用學到得知識去解決大量不同實際問題,在不斷得實踐過程中,你會近一步加深對C的理解。有了以上基礎之後,你會發現,在實踐過程中需要的其他知識,你會非常快速的掌握。




Windows程式設計師的學習路線  


1.當然要熟悉下C語言了 入門可以選用潭浩強的 《C程式設計》(當然最好能讀C Programming Language)特別要對其中的指標,結構體等東西一定要搞清楚了(要學好的很好至少要花費一個月時間) 為什麼要從C開始呢:<1> C好學 <2> 大多數的作業系統核心部分是用C開發的 <3> C的效率高且語言成熟


2.在1的基礎之上一定要認真學習一下資料結構 對C++程式設計師來說良好的資料結構可以讓一個程式設計師很輕鬆的完成程式設計 糟糕的資料結構可以把一個程式設計師累死 推薦書籍:嚴蔚敏的《資料結構(C語言版)》或北京大學的一本中C++版的資料結構 書中說到的每個主體在我們的程式設計中都會用到 認真學好會對你的以後的C++程式設計有太多的好處 (3個月時間)


3.學好了2之後可以學習下《C++ PROGRAM DESIGN》這本書初步介紹了C++和如何使用C++寫出Windows下的程式(要學好至少要花費3個月時間)


4.在3的基礎之上可以讀一本叫《Windows 95 程式設計》(它的最新版本是Programming Windows)這是一相Windows程式設計的領域的不朽之作(3個月時間) 通過2和3的學習你已經成為了一個可以設計Windows程式的程式設計師了 要想更好的設計Windows程式設計 一定要藉助框架結構不可 為什麼:框架結構可以加快我們程式設計的速度 雖然使用框架使得我們的程式的效率低了那麼一點 但隨著當今計算機的運算能力的提升 你不會感覺到這一點點的效能損失的反而會因為你使用的框架結構而使你的程式設計加快了速度 使用框架結構才算一個真正的VC++程式設計師


5.在4的基礎之上可以看一些簡單的MFC程式設計的書比如《Visual C++入門教程》之類的圖書 這可以使你能寫出一些帶有通用控制元件的MFC程式 (1個月時間)


6.在5的基礎之上你已經可以很快開發一個軟體了 但不瞭解MFC框架執行機制是很不好的 瞭解MFC的執行機制可以使你以後的MFC程式設計工作做的更好 推薦書籍侯傑的《深入淺出MFC》 但這本書真的不適合初學者當你有了一定的開發經驗以後這本書對你來說確實很好 若你很熟悉Windows下的SDK程式設計並打算或已經開始使用MFC進行軟體開發 那這本書對你來說再好不過了 (2個月時間)


7.在6的基礎之上你可以看下這本書《VC++技術內幕》由潘愛民譯的 推薦看原著(3個月)


8.在以上基礎之上為了更好的使用VC++這個工具 推薦看一下《VC++6.0寶典》(3個月) 從開發工具的角度講這本書寫的很好


9.為了更好的工作可以參考一下VC++程式設計百例


10.之後你可以看一下《Windows核心程式設計》 這本書很好的講解了Windows的程式設計 對你寫系統程式很有好處的 推薦看原版


11.只瞭解其形不算真正的瞭解 之後還要認真的讀一下Windows的核心原始碼 相信WRK 很容易找到的 可以配合《深入解析Windows作業系統》《Windows核心原理與實現》和《Windows核心情景分析》


12.其它一些東東《COM原理》(潘愛民) OpenGL D3D VC的資料庫程式設計 圖形影象 音視訊處理和網路都要有所瞭解和會使用


13.要做到一個好的程式設計師一定要對驅動程式有所瞭解所以寫一個檔案驅動之類的東東是很有必要的


14.經過以上各步的學習你完全成為一個優秀的Windows程式設計師了(前提是每一步要學好)


15.漏了一些重要的東東 編譯原理 彙編及 組成原理 和設計模式等也是很重要的東東 只有學好了這些才能明白語言為什麼要這樣組織才能高效。