通過這 9 本開源好書學(xué)習(xí)C 語言
書是非常私人的東西,編程類書籍也不例外。我們都是通過閱讀書籍來幫助掌握某種語言的基本知識。隨后又通過閱讀書籍來全面探索這門語言的靈活性。我仔細(xì)考察了一些我最喜愛的 C 語言書籍,并從其中選出了對我意義最大的九本。
本文引用地址:http://www.ex-cimer.com/article/201705/358655.htmC 語言是一種通用的、面向過程的高級編程語言。也是最具流行度和影響力的編程語言之一。該語言在設(shè)計(jì)時(shí)就被設(shè)計(jì)為可以通過編譯器進(jìn)行編譯,以此來對內(nèi)存進(jìn)行底層操作、高效地執(zhí)行機(jī)器指令以及在運(yùn)行時(shí)僅需要最小的支持。很多很多編程語言都得益于 C 語言, C 語言就像是編程界的通用語言一樣。
C 語言非常易懂。它允許程序員能夠以一種清晰、簡單、符合邏輯的方式來組織程序。這是一種非常靈活、實(shí)用并且簡潔的語言,同時(shí)它還具有非常容易讀懂的語法。使用 C 語言編寫的代碼運(yùn)行非???。可以非常簡單地操作計(jì)算機(jī)的底層設(shè)施。通過編譯器的指令可以允許我們?yōu)椴煌w系結(jié)構(gòu)的設(shè)備生成同一個(gè)版本的程序。
C 語言是自由的。因此學(xué)習(xí) C 語言的書籍也是體現(xiàn)了其自由性??靵砜纯次姨暨x的開源書籍,有沒有哪一本能夠吸引你?好好享受它吧!
《 C 語言》( The C Book)
作者: Mike Banahan, Declan Brady 和 Mark Doran ,350 頁
這本書是為那些已經(jīng)具備使用現(xiàn)代高級面向過程編程語言的程序員設(shè)計(jì)的。這本書專注于那些 C 語言的特有之處。尤其是使用 C 語言的方式是這本書所重點(diǎn)關(guān)注的。
包含以下章節(jié):
變量及運(yùn)算法則介紹 – 介紹了 C 語言的基礎(chǔ)知識, 包括關(guān)鍵字和標(biāo)識符,變量聲明,實(shí)數(shù)類型,整型,表達(dá)式和運(yùn)算法則以及常量
控制流及邏輯表達(dá)式 – 這一章介紹了在 C 語言中可以用于控制程序流程的幾種方法,包括一些尚未介紹的語句。 控制流,邏輯表達(dá)式以及奇怪的運(yùn)算符。
函數(shù) – 函數(shù)的類型, 遞歸,傳參數(shù)以及鏈接
數(shù)組和指針 – 數(shù)組, 指針, 字符處理, sizeof 以及儲存空間分配, 函數(shù)指針,包含指針的表達(dá)式,數(shù)組,&運(yùn)算符以及函數(shù)聲明
結(jié)構(gòu)體數(shù)據(jù)類型 – 結(jié)構(gòu)體, 聯(lián)合體, 位字段, 枚舉類型, 限定符、派生類型以及初始化
預(yù)處理器 – 預(yù)處理器是如何工作的及其相關(guān)指令
C 語言中的一些特定內(nèi)容 – 聲明, 定義,typedef, const 和 volatile以及序列點(diǎn)
庫 – 診斷, 字符處理, 本地化, 與具體實(shí)現(xiàn)相關(guān)的限制, 數(shù)學(xué)函數(shù), 非局部跳轉(zhuǎn), 信號處理, 可變參數(shù), 輸入輸出, 格式化 I/O, 字符 I/O, 無格式 I/O, 隨機(jī)訪問函數(shù), 通用函數(shù), 字符串處理, 日期和時(shí)間
C 語言編寫的完整程序 – 綜合以上內(nèi)容, main函數(shù)的參數(shù), 解析程序參數(shù), 模式匹配程序以及一個(gè)難度更大的程序
作者允許讀者利用此書做任何他們想做的事情,只需說明作者和版權(quán)。經(jīng)Mike Banahan確認(rèn),本書通過知識共享協(xié)議發(fā)布。
風(fēng)格的要素—— C 語言版(C Elements of Style)
作者 Steve Oualline ,265頁
這是一本十分有用的編程風(fēng)格指南,指導(dǎo) C 和 C++程序員如何去編寫可讀性良好的,易懂的,易于維護(hù)的程序。不論你是一個(gè)學(xué)生還是專業(yè)程序員,你都能從這本書中提供的技巧和技術(shù)中獲益,構(gòu)建優(yōu)雅可靠的代碼。
這本書意在向讀者們展示如何在你的程序中融入風(fēng)格良好的代碼。機(jī)器僅處理代碼,而人類關(guān)注于注釋。良好的編程風(fēng)格與這兩部分都有關(guān)。
我們的最終目標(biāo)是構(gòu)建設(shè)計(jì)良好,編寫良好的代碼,這種代碼對于計(jì)算機(jī)來說是高效的,同時(shí)包含了精心編寫的注釋用于幫助人類理解程序。這樣一來,調(diào)試,維護(hù)和增強(qiáng)程序,都變得更加容易了。最終還提升了代碼的可讀性,簡潔性,可靠性和可維護(hù)性。
在本書中,你可以找到有關(guān)編寫注釋,程序頭,變量命名,語句格式化,語句細(xì)節(jié),編寫預(yù)處理器命令,組織目錄和創(chuàng)建makefile的指南。
本書通過知識共享協(xié)議發(fā)布。
《編寫你自己的Lisp語言》(Build Your Own Lisp)
作者 Daniel Holden ,212頁
在學(xué)習(xí) C 語言的同時(shí)學(xué)習(xí)如何創(chuàng)造你自己的編程語言——一個(gè)最簡的Lisp語言(僅用不到1000行代碼)。
這本書是為兩種人寫的,一種是想要學(xué)習(xí) C 語言的人,另一種是想要知道如何創(chuàng)建一門語言的人。本書并不適合作為第一本入門書籍,因?yàn)槟阈枰恍┚幊探?jīng)驗(yàn)才能讀懂它的內(nèi)容。
本書基于 Creative Commons Attribution-NonCommercial-ShareAlike 3.0.協(xié)議發(fā)布
紙質(zhì)版可以在Amazon上購買。
《 GNU C 語言參考手冊》(The GNU C Reference Manual)
作者 Trevis Rothwell, James Youngman ,91頁
本書是一本 C 語言參考手冊,意在寫明C89,C99標(biāo)準(zhǔn)以及當(dāng)前GNU對標(biāo)準(zhǔn) C 語言的擴(kuò)展情況。本書并不適合新手閱讀。
包含以下章節(jié):
詞法元素——這部分內(nèi)容描述了預(yù)編譯之后,組成 C 語言代碼的詞法元素。包括5種:關(guān)鍵字,標(biāo)識符,常量,操作符和分隔符
數(shù)據(jù)類型——研究基礎(chǔ)的數(shù)據(jù)類型,枚舉,聯(lián)合體,結(jié)構(gòu)體,數(shù)組,指針,不完全類型,類型修飾詞,儲存類型修飾詞以及重命名類型
表達(dá)式和操作符 —— 還介紹了自增/自減,算數(shù)操作符,復(fù)共軛性,比較操作符,邏輯運(yùn)算符,位移,位運(yùn)算符,指針運(yùn)算符,sizeof,類型轉(zhuǎn)換等等。
語句 —— 標(biāo)簽,表達(dá)式,if 語句,switch 語句,while 語句,do 語句,for 語句,代碼塊,null 語句,goto 語句,break 語句,continue 語句,return 語句以及 typedef 語句
函數(shù) —— 學(xué)習(xí)函數(shù)聲明,函數(shù)定義,函數(shù)調(diào)用,參數(shù),變長參數(shù)列表,通過指針調(diào)用函數(shù),main 函數(shù),遞歸函數(shù)等等。
程序結(jié)構(gòu)和定義域 —— 從宏觀上來看程序
一個(gè)例程 —— 一個(gè)用 C 語言編寫的完整程序,包含 C 語言源文件和頭文件。這個(gè)程序是一個(gè)典型“hello world”程序的擴(kuò)展版,它向我們展示了在 GNU FSF 項(xiàng)目中 C 語言是如何工作的。
本書基于GNU Free Documentation License Version 1.3 及其更新版本發(fā)布。
《GNU C 語言編程教程》(The GNU C Programming Tutorial)
作者 Mark Burgess, Ron Hale-Evans ,290頁
本書以邏輯順序向讀者介紹了 C 語言的基本內(nèi)容。本書內(nèi)容涵蓋了 C 語言的全部主要內(nèi)容的細(xì)節(jié)以及如何使用 C 語言編程,特別強(qiáng)調(diào)了GNU/Linux編譯器以及相關(guān)軟件。
一些章節(jié)主要介紹了函數(shù),變量以及聲明,作用域,表達(dá)式和操作符,參數(shù),指針,判定,循環(huán),數(shù)組,字符串,輸入輸出等等。
本書基于GNU Free Documentation 協(xié)議 Version 1.1版發(fā)布。
《 C 語言基礎(chǔ)》(Essential C)
作者 Nick Parlante ,45頁
這份簡短的文檔解釋了 C 語言全部的常用特性和技術(shù)。這份文檔十分簡潔,因此它的目標(biāo)人群是已經(jīng)具有其他編程語言背景的人。
內(nèi)容包括變量,整型,浮點(diǎn)型,類型提升,截?cái)?,操作符,控制結(jié)構(gòu)(if,while,for),函數(shù),數(shù)值參數(shù),引用參數(shù),結(jié)構(gòu)體,指針,數(shù)組,預(yù)處理器以及 C 語言標(biāo)準(zhǔn)庫函數(shù)。
目錄:
簡介
基礎(chǔ)類型與運(yùn)算符
控制結(jié)構(gòu)
復(fù)雜數(shù)據(jù)類型
函數(shù)
雜項(xiàng)
高級數(shù)組與指針
運(yùn)算符和標(biāo)準(zhǔn)庫
根據(jù)作者的描述,我們得知這是一本基于開源協(xié)議發(fā)布的書籍。
《Beej的 C 語言教程》(Beej’s Guide to C Programming)
作者 Brian “Beej” Hall ,130 pages
本書試圖為那些心存困惑的讀者帶來一種僅能通過純粹 C 語言編程而產(chǎn)生的快感。
章節(jié):
構(gòu)建程序的基本結(jié)構(gòu)塊
變量,表達(dá)式和,語句。變量就是一個(gè)數(shù)字的名字——一個(gè) C 語言表達(dá)式可以包含其他的表達(dá)式以及運(yùn)算符。文章還介紹了if,while,do while以及程序重復(fù)執(zhí)行的for語句。
函數(shù)——當(dāng)程序塊變得很大,或是當(dāng)這些程序塊用來執(zhí)行一些特定的工作時(shí),我們會把它們封裝到函數(shù)中。
變量(續(xù)篇)——探討了變量的作用域和儲存類型
指針——它們是數(shù)據(jù)在內(nèi)存中的地址。就像一個(gè)整型的值可以是12,一個(gè)指針的值就是數(shù)據(jù)在內(nèi)存中的地址
結(jié)構(gòu)體——結(jié)構(gòu)體允許你將邏輯上相關(guān)的變量分組。隨后你可以將其作為一個(gè)整體來使用。
數(shù)組——一組相關(guān)數(shù)據(jù)的線性集合
字符串—— C 語言中的字符串就是內(nèi)存中的一組連續(xù)的比特,包含了一組字符
動(dòng)態(tài)內(nèi)存——探討了malloc(), free(), realloc() 和 calloc() 函數(shù)
更多內(nèi)容——指針運(yùn)算,typedef,枚舉,結(jié)構(gòu)體聲明,命令行參數(shù),多維數(shù)組,類型轉(zhuǎn)換和類型提升,不完整類型,void指針,NULL指針和static關(guān)鍵字
標(biāo)準(zhǔn)輸入輸出庫——用來進(jìn)行文件的讀寫。
字符串操作——用來查找子串的函數(shù),連接字符串的函數(shù),獲取字符串長度的函數(shù),等等。
算數(shù)——一些可以滿足你基本算數(shù)需求的函數(shù)。
本書基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 協(xié)議發(fā)布。
《現(xiàn)代 C 語言》(Modern C)
作者 Jens Gustedt ,310頁
本書鼓勵(lì)讀者逐級探索 C 語言的特性。內(nèi)容一共分為如下五層境界:
第一層——使讀者了解最基本的 C 語言程序。了解使用 C 語言的目的和數(shù)據(jù)結(jié)構(gòu),以及如何去使用它們
第二層——詳細(xì)的說明了大部分主要概念以及特性,包括控制結(jié)構(gòu),數(shù)據(jù)類型操作符和函數(shù)。這一級的主要目的是讓讀者能夠?qū)τ谶@些運(yùn)行程序必備的知識,有更深刻的理解。
第三層——進(jìn)入 C 語言的核心部分。詳細(xì)的解釋了指針,讓你熟悉 C 語言的內(nèi)存模型,并且讓你了解大多數(shù) C 語言庫的接口
第四層——深入理解一些特定的主題。比如性能,重入,原子性,線程及泛型編程
第五層——探討了作者對這門語言未來發(fā)展趨勢的理解
本書基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 協(xié)議發(fā)布
《GCC簡介》(An Introduction to GCC)
作者 Brian Gough ,144頁
本書介紹了 GNU C 語言和 C++編譯器——gcc 和 g++,它們是 GNU 編譯器套裝(GCC)的一部分。
本書介紹了如何使用編譯器。通過多年以來對郵件列表中的問題的觀察,本書帶領(lǐng)讀者直擊 GCC 的重要內(nèi)容。
章節(jié)介紹:
編譯c程序——介紹了如何使用gcc來編譯 C 語言程序。單個(gè)文件或多個(gè)文件均可以編譯,也可以使用操作系統(tǒng)函數(shù)和頭文件。
編譯選項(xiàng)——介紹了gcc中一些常用的編譯選項(xiàng)。這些參數(shù)控制一些功能,例如搜索庫函數(shù)和頭文件的路徑,提供額外的編譯告警和診斷。預(yù)處理宏和 C 語言方言。
使用預(yù)處理器——描述了cpp(GNU C preprocessor)的使用方法,cpp是GCC的一部分。預(yù)處理器會在編譯前將代碼中的宏展開,當(dāng)GCC處理c或者c+代碼時(shí),預(yù)處理器會自動(dòng)被調(diào)用。
編譯帶有debug信息的程序——提供了一個(gè)-g選項(xiàng)用以在中間文件和可執(zhí)行文件中存儲額外的調(diào)試信息。這些調(diào)試信息使得我們可以追蹤錯(cuò)誤,將機(jī)器指令中的問題定位到源代碼中。
優(yōu)化編譯——GCC是一個(gè)優(yōu)化過的編譯器。它提供了很多選項(xiàng),可以加速編譯或是減少編譯后文件的體積。
編譯C++程序——介紹了如何使用GCC編譯C++程序以及該語言可以使用的命令行選項(xiàng)。
平臺相關(guān)選項(xiàng)——介紹了一些常見平臺可以使用的選項(xiàng)
排錯(cuò)——GCC提供了一些幫助和診斷選項(xiàng)用于幫助我們定位編譯過程中出現(xiàn)的問題。
編譯器相關(guān)工具——介紹了GCC編譯過程中會用到的一些有用的工具。包括用來創(chuàng)建庫的 GNU 歸檔工具 ar,GNU 性能和覆蓋率測試程序gprof 和 gcov
編譯器是如何工作的——詳細(xì)介紹了GCC是如何把源文件編譯為可執(zhí)行文件的。編譯是一個(gè)多階段過程,涉及很多工具,包括GNU編譯器本身,GNU匯編器,以及GNU鏈接器。在編譯過程中使用的各種工具,我們統(tǒng)稱為編譯鏈。
檢查編譯后的文件——介紹了一些用來檢查可執(zhí)行文件和obj文件內(nèi)容的工具。
常見錯(cuò)誤信息——介紹了gcc和g++產(chǎn)生的最常見的錯(cuò)誤和告警信息。每種情況都帶有原因分析,樣例以及建議的解決辦法。
獲取幫助——如果讀者遇到了書中沒有提到的問題,還有很多介紹GCC和語言的手冊可以參考。
本書基于GNU Free Documentation協(xié)議發(fā)布
很多 C 語言書籍都可以免費(fèi)下載,但是可惜的是它們并沒有以開源協(xié)議來發(fā)布,或其基于何種協(xié)議并沒有明確說明。以下對其進(jìn)行介紹,排名不分先后:
《C編程導(dǎo)論》( Introduction to C Programming )– 作者 Rob Miles
《新標(biāo)準(zhǔn) C 語言》(The New Standard C: An Economic and Cultural Commentary) – 作者 Derek M. Jones
《使用標(biāo)準(zhǔn) C 語言進(jìn)行面向?qū)ο缶幊獭?Object-Oriented Programming with ANSI-C )– 作者 Axel-Tobias Schreiner
《編寫零缺陷的 C 語言代碼》(Writing Bug-Free C Code) – 作者 Jerry Jongenius
最后,如果你想買一本權(quán)威參考書,請認(rèn)準(zhǔn)《C程序設(shè)計(jì)語言》(The C Programming Language)。這本書非常簡練,不適合新手,但是被奉為經(jīng)典。
評論