通過(guò)這 9 本開(kāi)源好書(shū)學(xué)習C 語(yǔ)言
書(shū)是非常私人的東西,編程類(lèi)書(shū)籍也不例外。我們都是通過(guò)閱讀書(shū)籍來(lái)幫助掌握某種語(yǔ)言的基本知識。隨后又通過(guò)閱讀書(shū)籍來(lái)全面探索這門(mén)語(yǔ)言的靈活性。我仔細考察了一些我最喜愛(ài)的 C 語(yǔ)言書(shū)籍,并從其中選出了對我意義最大的九本。
本文引用地址:http://dyxdggzs.com/article/201705/358655.htmC 語(yǔ)言是一種通用的、面向過(guò)程的高級編程語(yǔ)言。也是最具流行度和影響力的編程語(yǔ)言之一。該語(yǔ)言在設計時(shí)就被設計為可以通過(guò)編譯器進(jìn)行編譯,以此來(lái)對內存進(jìn)行底層操作、高效地執行機器指令以及在運行時(shí)僅需要最小的支持。很多很多編程語(yǔ)言都得益于 C 語(yǔ)言, C 語(yǔ)言就像是編程界的通用語(yǔ)言一樣。
C 語(yǔ)言非常易懂。它允許程序員能夠以一種清晰、簡(jiǎn)單、符合邏輯的方式來(lái)組織程序。這是一種非常靈活、實(shí)用并且簡(jiǎn)潔的語(yǔ)言,同時(shí)它還具有非常容易讀懂的語(yǔ)法。使用 C 語(yǔ)言編寫(xiě)的代碼運行非?????梢苑浅:?jiǎn)單地操作計算機的底層設施。通過(guò)編譯器的指令可以允許我們?yōu)椴煌w系結構的設備生成同一個(gè)版本的程序。
C 語(yǔ)言是自由的。因此學(xué)習 C 語(yǔ)言的書(shū)籍也是體現了其自由性??靵?lái)看看我挑選的開(kāi)源書(shū)籍,有沒(méi)有哪一本能夠吸引你?好好享受它吧!
《 C 語(yǔ)言》( The C Book)

作者: Mike Banahan, Declan Brady 和 Mark Doran ,350 頁(yè)
這本書(shū)是為那些已經(jīng)具備使用現代高級面向過(guò)程編程語(yǔ)言的程序員設計的。這本書(shū)專(zhuān)注于那些 C 語(yǔ)言的特有之處。尤其是使用 C 語(yǔ)言的方式是這本書(shū)所重點(diǎn)關(guān)注的。
包含以下章節:
變量及運算法則介紹 – 介紹了 C 語(yǔ)言的基礎知識, 包括關(guān)鍵字和標識符,變量聲明,實(shí)數類(lèi)型,整型,表達式和運算法則以及常量
控制流及邏輯表達式 – 這一章介紹了在 C 語(yǔ)言中可以用于控制程序流程的幾種方法,包括一些尚未介紹的語(yǔ)句。 控制流,邏輯表達式以及奇怪的運算符。
函數 – 函數的類(lèi)型, 遞歸,傳參數以及鏈接
數組和指針 – 數組, 指針, 字符處理, sizeof 以及儲存空間分配, 函數指針,包含指針的表達式,數組,&運算符以及函數聲明
結構體數據類(lèi)型 – 結構體, 聯(lián)合體, 位字段, 枚舉類(lèi)型, 限定符、派生類(lèi)型以及初始化
預處理器 – 預處理器是如何工作的及其相關(guān)指令
C 語(yǔ)言中的一些特定內容 – 聲明, 定義,typedef, const 和 volatile以及序列點(diǎn)
庫 – 診斷, 字符處理, 本地化, 與具體實(shí)現相關(guān)的限制, 數學(xué)函數, 非局部跳轉, 信號處理, 可變參數, 輸入輸出, 格式化 I/O, 字符 I/O, 無(wú)格式 I/O, 隨機訪(fǎng)問(wèn)函數, 通用函數, 字符串處理, 日期和時(shí)間
C 語(yǔ)言編寫(xiě)的完整程序 – 綜合以上內容, main函數的參數, 解析程序參數, 模式匹配程序以及一個(gè)難度更大的程序
作者允許讀者利用此書(shū)做任何他們想做的事情,只需說(shuō)明作者和版權。經(jīng)Mike Banahan確認,本書(shū)通過(guò)知識共享協(xié)議發(fā)布。
風(fēng)格的要素—— C 語(yǔ)言版(C Elements of Style)

作者 Steve Oualline ,265頁(yè)
這是一本十分有用的編程風(fēng)格指南,指導 C 和 C++程序員如何去編寫(xiě)可讀性良好的,易懂的,易于維護的程序。不論你是一個(gè)學(xué)生還是專(zhuān)業(yè)程序員,你都能從這本書(shū)中提供的技巧和技術(shù)中獲益,構建優(yōu)雅可靠的代碼。
這本書(shū)意在向讀者們展示如何在你的程序中融入風(fēng)格良好的代碼。機器僅處理代碼,而人類(lèi)關(guān)注于注釋。良好的編程風(fēng)格與這兩部分都有關(guān)。
我們的最終目標是構建設計良好,編寫(xiě)良好的代碼,這種代碼對于計算機來(lái)說(shuō)是高效的,同時(shí)包含了精心編寫(xiě)的注釋用于幫助人類(lèi)理解程序。這樣一來(lái),調試,維護和增強程序,都變得更加容易了。最終還提升了代碼的可讀性,簡(jiǎn)潔性,可靠性和可維護性。
在本書(shū)中,你可以找到有關(guān)編寫(xiě)注釋?zhuān)绦蝾^,變量命名,語(yǔ)句格式化,語(yǔ)句細節,編寫(xiě)預處理器命令,組織目錄和創(chuàng )建makefile的指南。
本書(shū)通過(guò)知識共享協(xié)議發(fā)布。
《編寫(xiě)你自己的Lisp語(yǔ)言》(Build Your Own Lisp)

作者 Daniel Holden ,212頁(yè)
在學(xué)習 C 語(yǔ)言的同時(shí)學(xué)習如何創(chuàng )造你自己的編程語(yǔ)言——一個(gè)最簡(jiǎn)的Lisp語(yǔ)言(僅用不到1000行代碼)。
這本書(shū)是為兩種人寫(xiě)的,一種是想要學(xué)習 C 語(yǔ)言的人,另一種是想要知道如何創(chuàng )建一門(mén)語(yǔ)言的人。本書(shū)并不適合作為第一本入門(mén)書(shū)籍,因為你需要一些編程經(jīng)驗才能讀懂它的內容。
本書(shū)基于 Creative Commons Attribution-NonCommercial-ShareAlike 3.0.協(xié)議發(fā)布
紙質(zhì)版可以在A(yíng)mazon上購買(mǎi)。
《 GNU C 語(yǔ)言參考手冊》(The GNU C Reference Manual)

作者 Trevis Rothwell, James Youngman ,91頁(yè)
本書(shū)是一本 C 語(yǔ)言參考手冊,意在寫(xiě)明C89,C99標準以及當前GNU對標準 C 語(yǔ)言的擴展情況。本書(shū)并不適合新手閱讀。
包含以下章節:
詞法元素——這部分內容描述了預編譯之后,組成 C 語(yǔ)言代碼的詞法元素。包括5種:關(guān)鍵字,標識符,常量,操作符和分隔符
數據類(lèi)型——研究基礎的數據類(lèi)型,枚舉,聯(lián)合體,結構體,數組,指針,不完全類(lèi)型,類(lèi)型修飾詞,儲存類(lèi)型修飾詞以及重命名類(lèi)型
表達式和操作符 —— 還介紹了自增/自減,算數操作符,復共軛性,比較操作符,邏輯運算符,位移,位運算符,指針運算符,sizeof,類(lèi)型轉換等等。
語(yǔ)句 —— 標簽,表達式,if 語(yǔ)句,switch 語(yǔ)句,while 語(yǔ)句,do 語(yǔ)句,for 語(yǔ)句,代碼塊,null 語(yǔ)句,goto 語(yǔ)句,break 語(yǔ)句,continue 語(yǔ)句,return 語(yǔ)句以及 typedef 語(yǔ)句
函數 —— 學(xué)習函數聲明,函數定義,函數調用,參數,變長(cháng)參數列表,通過(guò)指針調用函數,main 函數,遞歸函數等等。
程序結構和定義域 —— 從宏觀(guān)上來(lái)看程序
一個(gè)例程 —— 一個(gè)用 C 語(yǔ)言編寫(xiě)的完整程序,包含 C 語(yǔ)言源文件和頭文件。這個(gè)程序是一個(gè)典型“hello world”程序的擴展版,它向我們展示了在 GNU FSF 項目中 C 語(yǔ)言是如何工作的。
本書(shū)基于GNU Free Documentation License Version 1.3 及其更新版本發(fā)布。
《GNU C 語(yǔ)言編程教程》(The GNU C Programming Tutorial)
作者 Mark Burgess, Ron Hale-Evans ,290頁(yè)
本書(shū)以邏輯順序向讀者介紹了 C 語(yǔ)言的基本內容。本書(shū)內容涵蓋了 C 語(yǔ)言的全部主要內容的細節以及如何使用 C 語(yǔ)言編程,特別強調了GNU/Linux編譯器以及相關(guān)軟件。
一些章節主要介紹了函數,變量以及聲明,作用域,表達式和操作符,參數,指針,判定,循環(huán),數組,字符串,輸入輸出等等。
本書(shū)基于GNU Free Documentation 協(xié)議 Version 1.1版發(fā)布。
《 C 語(yǔ)言基礎》(Essential C)

作者 Nick Parlante ,45頁(yè)
這份簡(jiǎn)短的文檔解釋了 C 語(yǔ)言全部的常用特性和技術(shù)。這份文檔十分簡(jiǎn)潔,因此它的目標人群是已經(jīng)具有其他編程語(yǔ)言背景的人。
內容包括變量,整型,浮點(diǎn)型,類(lèi)型提升,截斷,操作符,控制結構(if,while,for),函數,數值參數,引用參數,結構體,指針,數組,預處理器以及 C 語(yǔ)言標準庫函數。
目錄:
簡(jiǎn)介
基礎類(lèi)型與運算符
控制結構
復雜數據類(lèi)型
函數
雜項
高級數組與指針
運算符和標準庫
根據作者的描述,我們得知這是一本基于開(kāi)源協(xié)議發(fā)布的書(shū)籍。
《Beej的 C 語(yǔ)言教程》(Beej’s Guide to C Programming)

作者 Brian “Beej” Hall ,130 pages
本書(shū)試圖為那些心存困惑的讀者帶來(lái)一種僅能通過(guò)純粹 C 語(yǔ)言編程而產(chǎn)生的快感。
章節:
構建程序的基本結構塊
變量,表達式和,語(yǔ)句。變量就是一個(gè)數字的名字——一個(gè) C 語(yǔ)言表達式可以包含其他的表達式以及運算符。文章還介紹了if,while,do while以及程序重復執行的for語(yǔ)句。
函數——當程序塊變得很大,或是當這些程序塊用來(lái)執行一些特定的工作時(shí),我們會(huì )把它們封裝到函數中。
變量(續篇)——探討了變量的作用域和儲存類(lèi)型
指針——它們是數據在內存中的地址。就像一個(gè)整型的值可以是12,一個(gè)指針的值就是數據在內存中的地址
結構體——結構體允許你將邏輯上相關(guān)的變量分組。隨后你可以將其作為一個(gè)整體來(lái)使用。
數組——一組相關(guān)數據的線(xiàn)性集合
字符串—— C 語(yǔ)言中的字符串就是內存中的一組連續的比特,包含了一組字符
動(dòng)態(tài)內存——探討了malloc(), free(), realloc() 和 calloc() 函數
更多內容——指針運算,typedef,枚舉,結構體聲明,命令行參數,多維數組,類(lèi)型轉換和類(lèi)型提升,不完整類(lèi)型,void指針,NULL指針和static關(guān)鍵字
標準輸入輸出庫——用來(lái)進(jìn)行文件的讀寫(xiě)。
字符串操作——用來(lái)查找子串的函數,連接字符串的函數,獲取字符串長(cháng)度的函數,等等。
算數——一些可以滿(mǎn)足你基本算數需求的函數。
本書(shū)基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 協(xié)議發(fā)布。
《現代 C 語(yǔ)言》(Modern C)

作者 Jens Gustedt ,310頁(yè)
本書(shū)鼓勵讀者逐級探索 C 語(yǔ)言的特性。內容一共分為如下五層境界:
第一層——使讀者了解最基本的 C 語(yǔ)言程序。了解使用 C 語(yǔ)言的目的和數據結構,以及如何去使用它們
第二層——詳細的說(shuō)明了大部分主要概念以及特性,包括控制結構,數據類(lèi)型操作符和函數。這一級的主要目的是讓讀者能夠對于這些運行程序必備的知識,有更深刻的理解。
第三層——進(jìn)入 C 語(yǔ)言的核心部分。詳細的解釋了指針,讓你熟悉 C 語(yǔ)言的內存模型,并且讓你了解大多數 C 語(yǔ)言庫的接口
第四層——深入理解一些特定的主題。比如性能,重入,原子性,線(xiàn)程及泛型編程
第五層——探討了作者對這門(mén)語(yǔ)言未來(lái)發(fā)展趨勢的理解
本書(shū)基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 協(xié)議發(fā)布
《GCC簡(jiǎn)介》(An Introduction to GCC)

作者 Brian Gough ,144頁(yè)
本書(shū)介紹了 GNU C 語(yǔ)言和 C++編譯器——gcc 和 g++,它們是 GNU 編譯器套裝(GCC)的一部分。
本書(shū)介紹了如何使用編譯器。通過(guò)多年以來(lái)對郵件列表中的問(wèn)題的觀(guān)察,本書(shū)帶領(lǐng)讀者直擊 GCC 的重要內容。
章節介紹:
編譯c程序——介紹了如何使用gcc來(lái)編譯 C 語(yǔ)言程序。單個(gè)文件或多個(gè)文件均可以編譯,也可以使用操作系統函數和頭文件。
編譯選項——介紹了gcc中一些常用的編譯選項。這些參數控制一些功能,例如搜索庫函數和頭文件的路徑,提供額外的編譯告警和診斷。預處理宏和 C 語(yǔ)言方言。
使用預處理器——描述了cpp(GNU C preprocessor)的使用方法,cpp是GCC的一部分。預處理器會(huì )在編譯前將代碼中的宏展開(kāi),當GCC處理c或者c+代碼時(shí),預處理器會(huì )自動(dòng)被調用。
編譯帶有debug信息的程序——提供了一個(gè)-g選項用以在中間文件和可執行文件中存儲額外的調試信息。這些調試信息使得我們可以追蹤錯誤,將機器指令中的問(wèn)題定位到源代碼中。
優(yōu)化編譯——GCC是一個(gè)優(yōu)化過(guò)的編譯器。它提供了很多選項,可以加速編譯或是減少編譯后文件的體積。
編譯C++程序——介紹了如何使用GCC編譯C++程序以及該語(yǔ)言可以使用的命令行選項。
平臺相關(guān)選項——介紹了一些常見(jiàn)平臺可以使用的選項
排錯——GCC提供了一些幫助和診斷選項用于幫助我們定位編譯過(guò)程中出現的問(wèn)題。
編譯器相關(guān)工具——介紹了GCC編譯過(guò)程中會(huì )用到的一些有用的工具。包括用來(lái)創(chuàng )建庫的 GNU 歸檔工具 ar,GNU 性能和覆蓋率測試程序gprof 和 gcov
編譯器是如何工作的——詳細介紹了GCC是如何把源文件編譯為可執行文件的。編譯是一個(gè)多階段過(guò)程,涉及很多工具,包括GNU編譯器本身,GNU匯編器,以及GNU鏈接器。在編譯過(guò)程中使用的各種工具,我們統稱(chēng)為編譯鏈。
檢查編譯后的文件——介紹了一些用來(lái)檢查可執行文件和obj文件內容的工具。
常見(jiàn)錯誤信息——介紹了gcc和g++產(chǎn)生的最常見(jiàn)的錯誤和告警信息。每種情況都帶有原因分析,樣例以及建議的解決辦法。
獲取幫助——如果讀者遇到了書(shū)中沒(méi)有提到的問(wèn)題,還有很多介紹GCC和語(yǔ)言的手冊可以參考。
本書(shū)基于GNU Free Documentation協(xié)議發(fā)布
很多 C 語(yǔ)言書(shū)籍都可以免費下載,但是可惜的是它們并沒(méi)有以開(kāi)源協(xié)議來(lái)發(fā)布,或其基于何種協(xié)議并沒(méi)有明確說(shuō)明。以下對其進(jìn)行介紹,排名不分先后:
《C編程導論》( Introduction to C Programming )– 作者 Rob Miles
《新標準 C 語(yǔ)言》(The New Standard C: An Economic and Cultural Commentary) – 作者 Derek M. Jones
《使用標準 C 語(yǔ)言進(jìn)行面向對象編程》(Object-Oriented Programming with ANSI-C )– 作者 Axel-Tobias Schreiner
《編寫(xiě)零缺陷的 C 語(yǔ)言代碼》(Writing Bug-Free C Code) – 作者 Jerry Jongenius
最后,如果你想買(mǎi)一本權威參考書(shū),請認準《C程序設計語(yǔ)言》(The C Programming Language)。這本書(shū)非常簡(jiǎn)練,不適合新手,但是被奉為經(jīng)典。
評論