C  

Apr 24, 2016 • Michael Chen

我要先提醒這本書的準讀者,這不定一本典型的 C 語言教科書。例如:在這本書中,作者會教你把常用的標頭檔都集中寫在某個檔案中,即使程式因此多加了幾千行,編譯時間也花不到幾秒;另外,本書作者每次在編譯程式時,都會加上 -g 參數,其實程式也沒增加幾 KB,但是卻多了許多除錯用的資訊。另外,本書中約有三分之一的篇幅是在討論 C 語言的語法以外的內容,主要是介紹 C 語言的生態圈,這些內容在典型的教科書中相對少見。

本書的作者 Ben Klemens 主修的是經濟學和社會科學,所以,對於程式的思考方式和資訊出身的程式設計師有所不同,讀者不用對這本書的內容照單全收,但這本書的確有可參考之處。

本書的前言介紹了一些 C 語言的背景知識,以及作者對於本書的一些想法,可以稍微看一下。之後,本書的正文分為兩部分,第一部分是環境,介紹現代的 C 語言相關工具;第二部分是語言,以和一般教科書不同的角度,探討許多 C 語言的語法。

在第一章中,快速地介紹了許多 Unix-like 系統上的套件,之後主要是討論各種編譯 C 語言軟體的技巧,畢竟,無法順利産生執行檔的話,就無法使用 C 程式碼。對於新手來說,本章的步調可能會有些過快,至少先習慣 make 的使用方式和 Makefile 的寫法。

第二章介紹開發相關的議題,包括除錯、測試程式、撰寫文件等。第三章中,以 Autotools 發布以 C 語言撰寫的軟體。這兩章對於有志學習開發相關工具的讀者來說,可以做為入門的教程。

第四章以 Git 為例,介紹版本控制的基本觀念。透過這章的內容,可學會基本的版本控制軟體的使用。這章算是相對簡單的主題。

第五章以 Python 為例,介紹如何以C 語言撰寫其他語言的延伸模組。這是一個相對進階的主題,通常都散見於各語言的進階教程中,對於想結合 C 和其他語言的讀者,可以讀一讀本章的內容。

第六章帶著讀者複習了指標的概念。由於指標是學習 C 語言的重要主題,本書在第二部分的第一個章節就介紹相關內容。而在本書後續的章節中,也會用到指標,對於指標還不熟的讀者,可以利用機會好好學習一下。

第七章介紹一些過時的 C 語法,以及替代的做法。本章的內容不會很難,但是可學到不少實用的概念。

第八章介紹一些前置處理器的使用技巧及 const 關鍵字的相關議題。雖然前置處理器的雷很多,仍然有時候會需要使用。這些議題在一般的書上相對少見,需要的讀者可以看一看。

第九章介紹以 C 語言處理字串的方式。由於在 C 語言中,原本的字串處理方式相對較低階,故作者引入一些較新的方式,以減輕程式設計師的負擔。

第十章的前半部介紹以陣列 (array) 和結構 (struct) 為參數的函式,其中使用到一些相對少見的前置處理器技巧,如果有需要撰寫此種函式的讀者,可以看一看。後半部則介紹以 void 指標達成 C 語言的泛型程式,算是相當實用的內容。

第十一章介紹如何以 C 語言撰寫物件導向程式,這是本書最有趣的一章。不過,C 語言的物件導向程式,和傳統的物件導向不太相同,而是使用 struct 和函式結合的方式撰寫。雖然這章的內容不一定會用到,善用本章的方式撰寫程式,的確可以妥善地整理程式碼。

第十二章介紹數個第三方的 C 語言函式庫,有需要的讀者可自行參考。不過,本章隱含的觀點是,善用第三方函式庫,可以省下不少程式設計師的時間。

總和來說,本書涵蓋相當多的主題,而且,本書的步調相當快速,讀起來十分地充實。然而,想要順利地閱讀本書,讀者需要基礎的 C 語言和 Unix-like 系統相關的知識;如果讀者發現本書的內容過於艱澀,建議先暫時放下本書,補充相關知識後,再繼續讀下去。

原文第二版:http://shop.oreilly.com/product/0636920033677.do 中譯第一版:http://books.gotop.com.tw/v_A360