通過這九本開源好書學習 C 語言
C 語言是一種通用的、面向過程的高級編程語言。也是最具流行度和影響力的編程語言之一。該語言在設計時就被設計為可以通過編譯器進行編譯,以此來對內存進行底層操作、高效地執行機器指令以及在運行時僅需要最小的支持。很多很多編程語言都得益於 C 語言, C 語言就像是編程界的通用語言一樣。
C 語言非常易懂。它允許程序員能夠以一種清晰、簡單、符合邏輯的方式來組織程序。這是一種非常靈活、實用並且簡潔的語言,同時它還具有非常容易讀懂的語法。使用 C 語言編寫的代碼運行非常快。可以非常簡單地操作計算機的底層設施。通過編譯器的指令可以允許我們為不同體系結構的設備生成同一個版本的程序。
C 語言是自由的。因此學習 C 語言的書籍也是體現了其自由性。快來看看我挑選的開源書籍,有沒有哪一本能夠吸引你?好好享受它吧!
《 C 語言 》
《 C 語言 》這本書是為那些已經具備使用現代高級面向過程編程語言的程序員設計的。這本書專註於那些 C 語言的特有之處。尤其是使用 C 語言的方式是這本書所重點關注的。作者: Mike Banahan, Declan Brady 和 Mark Doran ,350 頁
包含以下章節:
- 變數及運演算法則介紹 – 介紹了 C 語言的基礎知識, 包括關鍵字和標識符,變數聲明,實數類型,整型,表達式和運演算法則以及常量
- 控制流及邏輯表達式 – 這一章介紹了在 C 語言中可以用於控制程序流程的幾種方法,包括一些尚未介紹的語句。 控制流,邏輯表達式以及奇怪的運算符。
- 函數 – 函數的類型, 遞歸,傳參數以及鏈接
- 數組和指針 – 數組, 指針, 字元處理, sizeof 以及儲存空間分配, 函數指針,包含指針的表達式,數組,
&
運算符以及函數聲明 - 結構體數據類型 – 結構體, 聯合體, 位欄位, 枚舉類型, 限定符、派生類型以及初始化
- 預處理器 – 預處理器是如何工作的及其相關指令
- C 語言中的一些特定內容 – 聲明, 定義,
typedef
,const
和volatile
以及序列點 - 庫 – 診斷, 字元處理, 本地化, 與具體實現相關的限制, 數學函數, 非局部跳轉, 信號處理, 可變參數, 輸入輸出, 格式化 I/O, 字元 I/O, 無格式 I/O, 隨機訪問函數, 通用函數, 字元串處理, 日期和時間
- C 語言編寫的完整程序 – 綜合以上內容, main函數的參數, 解析程序參數, 模式匹配程序以及一個難度更大的程序
作者允許讀者利用此書做任何他們想做的事情,只需說明作者和版權。經 Mike Banahan 確認,本書通過知識共享協議發布。
《 風格的要素—— C 語言版 》
作者 Steve Oualline ,265頁
《 風格的要素—— C 語言版 》是一本十分有用的編程風格指南,指導 C 和 C++ 程序員如何去編寫可讀性良好的,易懂的,易於維護的程序。不論你是一個學生還是專業程序員,你都能從這本書中提供的技巧和技術中獲益,構建優雅可靠的代碼。
這本書意在向讀者們展示如何在你的程序中融入風格良好的代碼。機器僅處理代碼,而人類關注於注釋。良好的編程風格與這兩部分都有關。
我們的最終目標是構建設計良好,編寫良好的代碼,這種代碼對於計算機來說是高效的,同時包含了精心編寫的注釋用於幫助人類理解程序。這樣一來,調試,維護和增強程序,都變得更加容易了。最終還提升了代碼的可讀性,簡潔性,可靠性和可維護性。
在本書中,你可以找到有關編寫注釋,程序頭,變數命名,語句格式化,語句細節,編寫預處理器命令,組織目錄和創建makefile的指南。
本書通過知識共享協議發布。
《 編寫你自己的 Lisp 語言 》
作者 Daniel Holden ,212頁
在學習 C 語言的同時學習如何創造你自己的編程語言——一個最簡的 Lisp 語言(僅用不到1000行代碼)。
《 編寫你自己的 Lisp 語言 》這本書是為兩種人寫的,一種是想要學習 C 語言的人,另一種是想要知道如何創建一門語言的人。本書並不適合作為第一本入門書籍,因為你需要一些編程經驗才能讀懂它的內容。
本書基於知識共享署名-非商業性使用-3.0 未本地化版本協議發布
紙質版可以在 Amazon 上購買。
《 GNU C 語言參考手冊 》
作者 Trevis Rothwell, James Youngman ,91頁
《 GNU C 語言參考手冊 》是一本 C 語言參考手冊,意在寫明 C89,C99 標準以及當前 GNU 對標準 C 語言的擴展情況。本書並不適合新手閱讀。
包含以下章節:
- 詞法元素——這部分內容描述了預編譯之後,組成 C 語言代碼的詞法元素。包括 5 種:關鍵字,標識符,常量,操作符和分隔符
- 數據類型——研究基礎的數據類型,枚舉,聯合體,結構體,數組,指針,不完全類型,類型修飾詞,儲存類型修飾詞以及重命名類型
- 表達式和操作符 —— 還介紹了自增/自減,算數操作符,復共軛性,比較操作符,邏輯運算符,位移,位運算符,指針運算符,
sizeof
,類型轉換等等。 - 語句 —— 標籤,表達式,
if
語句,switch
語句,while
語句,do
語句,for
語句,代碼塊,null
語句,goto
語句,break
語句,continue
語句,return
語句以及typedef
語句 - 函數 —— 學習函數聲明,函數定義,函數調用,參數,變長參數列表,通過指針調用函數,
main
函數,遞歸函數等等。 - 程序結構和定義域 —— 從宏觀上來看程序
- 一個常式 —— 一個用 C 語言編寫的完整程序,包含 C 語言源文件和頭文件。這個程序是一個典型「hello world」程序的擴展版,它向我們展示了在 GNU FSF 項目中 C 語言是如何工作的。
本書基於 GNU Free Documentation License Version 1.3 及其更新版本發布。
《 GNU C 語言編程教程 》
作者 Mark Burgess, Ron Hale-Evans ,290頁
《 GNU C 語言編程教程 》以邏輯順序向讀者介紹了 C 語言的基本內容。本書內容涵蓋了 C 語言的全部主要內容的細節以及如何使用 C 語言編程,特彆強調了GNU/Linux編譯器以及相關軟體。
一些章節主要介紹了函數,變數以及聲明,作用域,表達式和操作符,參數,指針,判定,循環,數組,字元串,輸入輸出等等。
本書基於 GNU Free Documentation License Version 1.1 版發布。
《 C 語言基礎 》
作者 Nick Parlante ,45頁
《 C 語言基礎 》這份簡短的文檔解釋了 C 語言全部的常用特性和技術。這份文檔十分簡潔,因此它的目標人群是已經具有其他編程語言背景的人。
內容包括變數,整型,浮點型,類型提升,截斷,操作符,控制結構(if
,while
,for
),函數,數值參數,引用參數,結構體,指針,數組,預處理器以及 C 語言標準庫函數。
目錄:
- 簡介
- 基礎類型與運算符
- 控制結構
- 複雜數據類型
- 函數
- 雜項
- 高級數組與指針
- 運算符和標準庫
根據作者的描述,我們得知這是一本基於開源協議發布的書籍。
《 Beej 的 C 語言教程 》
作者 Brian 「Beej」 Hall ,130 pages
《 Beej 的 C 語言教程 》試圖為那些心存困惑的讀者帶來一種僅能通過純粹 C 語言編程而產生的快感。
章節:
-
構建程序的基本結構塊
-
變數,表達式和,語句。變數就是一個數字的名字——一個 C 語言表達式可以包含其他的表達式以及運算符。文章還介紹了
if
,while
,do while
以及程序重複執行的for
語句。 -
函數——當程序塊變得很大,或是當這些程序塊用來執行一些特定的工作時,我們會把它們封裝到函數中。
-
變數(續篇)——探討了變數的作用域和儲存類型
-
指針——它們是數據在內存中的地址。就像一個整型的值可以是12,一個指針的值就是數據在內存中的地址
-
結構體——結構體允許你將邏輯上相關的變數分組。隨後你可以將其作為一個整體來使用。
-
數組——一組相關數據的線性集合
-
字元串—— C 語言中的字元串就是內存中的一組連續的比特,包含了一組字元
-
動態內存——探討了malloc(), free(), realloc() 和 calloc() 函數
-
更多內容——指針運算,
typedef
,枚舉,結構體聲明,命令行參數,多維數組,類型轉換和類型提升,不完整類型,void
指針,NULL
指針和static
關鍵字 -
標準輸入輸出庫——用來進行文件的讀寫。
-
字元串操作——用來查找子串的函數,連接字元串的函數,獲取字元串長度的函數,等等。
-
算數——一些可以滿足你基本算數需求的函數。
本書基於知識共享署名-非商業性使用-禁止演繹 3.0 未本地化版本協議發布。
《 現代 C 語言 》
作者 Jens Gustedt ,310頁
《 現代 C 語言 》鼓勵讀者逐級探索 C 語言的特性。內容一共分為如下五層境界:
- 第一層——使讀者了解最基本的 C 語言程序。了解使用 C 語言的目的和數據結構,以及如何去使用它們
- 第二層——詳細的說明了大部分主要概念以及特性,包括控制結構,數據類型操作符和函數。這一級的主要目的是讓讀者能夠對於這些運行程序必備的知識,有更深刻的理解。
- 第三層——進入 C 語言的核心部分。詳細的解釋了指針,讓你熟悉 C 語言的內存模型,並且讓你了解大多數 C 語言庫的介面
- 第四層——深入理解一些特定的主題。比如性能,重入,原子性,線程及泛型編程
- 第五層——探討了作者對這門語言未來發展趨勢的理解
本書基於知識共享署名-非商業性使用-禁止演繹 3.0 未本地化版本協議發布
《 GCC 簡介 》
作者 Brian Gough ,144頁
《 GCC 簡介 》介紹了 GNU C 語言和 C++編譯器——gcc 和 g++,它們是 GNU 編譯器套裝(GCC)的一部分。
本書介紹了如何使用編譯器。通過多年以來對郵件列表中的問題的觀察,本書帶領讀者直擊 GCC 的重要內容。
章節介紹:
- 編譯c程序——介紹了如何使用 gcc 來編譯 C 語言程序。單個文件或多個文件均可以編譯,也可以使用操作系統函數和頭文件。
- 編譯選項——介紹了 gcc 中一些常用的編譯選項。這些參數控制一些功能,例如搜索庫函數和頭文件的路徑,提供額外的編譯告警和診斷。預處理宏和 C 語言方言。
- 使用預處理器——描述了cpp(GNU C preprocessor)的使用方法,cpp 是 GCC 的一部分。預處理器會在編譯前將代碼中的宏展開,當 GCC 處理 c 或者 c++ 代碼時,預處理器會自動被調用。
- 編譯帶有調試信息的程序——提供了一個
-g
選項用以在中間文件和可執行文件中存儲額外的調試信息。這些調試信息使得我們可以追蹤錯誤,將機器指令中的問題定位到源代碼中。 - 優化編譯——GCC 是一個優化過的編譯器。它提供了很多選項,可以加速編譯或是減少編譯後文件的體積。
- 編譯C++程序——介紹了如何使用 GCC 編譯 C++ 程序以及該語言可以使用的命令行選項。
- 平台相關選項——介紹了一些常見平台可以使用的選項
- 排錯——GCC提供了一些幫助和診斷選項用於幫助我們定位編譯過程中出現的問題。
- 編譯器相關工具——介紹了 GCC 編譯過程中會用到的一些有用的工具。包括用來創建庫的 GNU 歸檔工具 ar,GNU 性能和覆蓋率測試程序 gprof 和 gcov
- 編譯器是如何工作的——詳細介紹了 GCC 是如何把源文件編譯為可執行文件的。編譯是一個多階段過程,涉及很多工具,包括 GNU 編譯器本身,GNU 彙編器,以及 GNU 鏈接器。在編譯過程中使用的各種工具,我們統稱為編譯鏈。
- 檢查編譯後的文件——介紹了一些用來檢查可執行文件和 obj 文件內容的工具。
- 常見錯誤信息——介紹了 gcc 和 g++ 產生的最常見的錯誤和告警信息。每種情況都帶有原因分析,樣例以及建議的解決辦法。
- 獲取幫助——如果讀者遇到了書中沒有提到的問題,還有很多介紹GCC和語言的手冊可以參考。
本書基於 GNU Free Documentation 協議發布
很多 C 語言書籍都可以免費下載,但是可惜的是它們並沒有以開源協議來發布,或其基於何種協議並沒有明確說明。以下對其進行介紹,排名不分先後:
- 《 C編程導論 》 – 作者 Rob Miles
- 《 新標準 C 語言 》– 作者 Derek M. Jones
- 《 使用標準 C 語言進行面向對象編程 》– 作者 Axel-Tobias Schreiner
- 《 編寫零缺陷的 C 語言代碼 》– 作者 Jerry Jongenius
最後,如果你想買一本權威參考書,請認準《 C 程序設計語言 》。這本書非常簡練,不適合新手,但是被奉為經典。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive