學C語言到底學些什么— “語法”和“函數庫”
C語言學習的關鍵,是要先搞明白,學C語言到底是在學些什么?
我這么一問,有的同學就要翻開課本,指著目錄說,我知道我知道,有變量,數據類型,循環(huán)語句,函數,哦哦哦,還有指針等等!
很遺憾,如果你以為學習C語言就是學習這些東西,那你得趕緊糾正一下看法,否則接下來的學習會困難重重。因為我曾經就是這么掉到坑里的,這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節(jié),又讓我遲遲不能接觸到更重要的知識,結果是眼高手低——知道許多別人不知道的無用知識,但是又寫不出什么真正像樣的程序來。
所謂“語法”,就是入門教材里最著重講解的內容。也就是那些所謂的變量、數據類型、分支判斷、循環(huán)、函數、指針等等。
這些內容比較枯燥,但是好消息是這些內容并不難,都是一些格式化的東西。只要你多練習,就會自動的刻在你的腦子里,成為一種下意識的習慣。
但是 “語法”本身其實沒什么用。因為它只是一種格式規(guī)范,你學得再好,也不能引導你寫出厲害的程序。因為在軟件設計中,實際上最核心的部分還是在于其 “函數庫”部分。
什么是 “函數庫”?
簡單來說,函數庫就是別人編寫好的C函數,直接提供給你用,你只要調用里面的函數,就能實現一定的功能。例如 printf() 函數,你肯定知道,只要調用這個函數,你就能夠在那個黑糊糊的窗口里顯示一段文字。你并不明白 printf() 的內部工作原理,但是你知道你只要按照說明去調用,就能夠實現對應的功能。
這就是函數庫——別人寫好的,打包送到你面前,你可以自由調用來做各種各樣的事情的函數集合。
我來說幾個來自函數庫的函數,例如 CreateWindowEx() 函數可以用來創(chuàng)建一個窗體(這個函數由微軟提供),例如 GaussianBlur() 函數可以用來對一個圖像進行高斯模糊處理(這個函數由 OpenCV 提供),再比如 evhttp_new() 函數可以創(chuàng)建一個 HTTP 服務程序(這個函數由 libevent 提供)……
其他還有什么庫函數?太多了。從控制網絡通信,到截取視頻畫面并分析其中的人臉位置,到加解密本地文件,甚至包括微信收發(fā)消息,抓取淘寶商品信息……庫函數的數量和有用程度遠遠超乎大家的想象。
誒?你從來沒聽說過還有這些東西?課本里也沒提到?
那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函數而已。事實上 C 語言包含的庫函數本身就有不少,但是更多更強大的還是許多第三方庫函數,例如我上面提到的這些。
重點是在于,我想告訴你,庫函數才是你學習C語言并將其應用于實際的關鍵!
學會調用別人的庫函數,甚至寫出自己的庫函數,都是極其重要的。因為一個函數,本質上就是一個功能單位。你擁有的基礎設施越多,你的發(fā)揮空間越大。道理就是這么簡單。這就是我需要向大家強調的第二個觀點,要想寫出實用的C程序,一大關鍵就是研究并學會使用各種庫函數。
你看見隔壁王二寫了個三維程序能讓一個彩色的立方體在空中旋轉?快找 OpenGL 庫函數來用。什么?劉大寶寫了個網絡軟件能在局域網里聊天?快找 Socket 庫來用。
看見了嗎?庫函數有多重要?
但是,函數庫的學習并不是孤立的。許多庫函數背后需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函數庫,代表的不僅僅是明白如何調用那么簡單, 而更反映了我們對一個特定領域——網絡、數字圖像、密碼學、操作系統(tǒng)等的認識。
編輯:admin 最后修改時間:2018-05-08