C 語言資源大全中文版


C 語言資源大全中文版

我想很多程序員應該記得 GitHub 上有一個 Awesome:XXX 系列的資源整理。awesome-c 是 koz.ross 發起維護的 C 語言資源列表,內容包括了:構建系統、編譯器、數據庫、加密、初中高的教程/指南、書籍、庫等等。

Awesome 系列雖然挺全,但基本只對收錄的資源做了極爲簡要的介紹,如果有更詳細的中文介紹,對相應開發者的幫助會更大。這也是我們發起這個開源項目的初衷。


我們要做什麼?


如何參與本項目?

從下面的目錄來看,本項目的工作量小不了,所以非常期待能有更多程序員一起來參與。

不過加入前,有幾個小要求:

  • 英文還不錯,能讀懂英文並用自己的話複述;
  • 在用 C 語言;

如有興趣,請加 QQ:50872495。加 Q 時請註明「C語言大全」。// 這不是 QQ 羣。


如何爲列表貢獻新資源?

歡迎大家爲列表貢獻高質量的新資源,提交PR時請參照以下要求:

  • 請確保推薦的資源自己使用過
  • 提交PR時請註明推薦理由

資源列表管理收到PR請求後,會定期(每週)在微博轉發本週提交的PR列表,並在微博上面聽取使用過這些資源的意見。確認通過後,會加入資源大全。

感謝您的貢獻!


本項目的參與者

注:名單不分排名,不定期補充更新


獎勵計劃

雖然獎勵可能並不是你加入的主要原因,但還是有必要提一下:

  • 整理超過 20 個資源後,可在伯樂在線上開通打賞;
  • 每整理 20 個資源,有機會獲得技術書籍或各種有意思的創意、極客產品;
  • 獎勵詳情

目錄

構建系統

下面是一些 C 項目的自動化構建和測試工具。

  • aimake:一個被設計來避免複雜配置的構建工具。GNU GPL3 或更高版本。官網
  • Autoconf:一個可擴展的 M4 宏指令包,提供命令行腳本來自動配置軟件源碼包,是 Autotools 的一部分。GNU GPL3 或更高版本。官網
  • Automake:一個自動生成符合 GNU 代碼標準的 Makefile.in 文件的工具。需要與 Autoconf 配合使用,它也是 Autotools 的一部分。GNU GPL3 或更高版本。官網
  • Jam:一個構建系統,它被設計的比make更加易用。隱式地理解 C 的構建規則。Jam License官網
  • Libtool:一個通用庫支持腳本,是 Autotools 的一部分。GNU GPL3 或更高版本。官網
  • Meson:一個非常快,用戶友好的構建系統,基於 Ninja。Apache2.0官網

編譯器

  • Clang:一個基於 LLVM 的 C 的編譯器,支持 C11 標準。NCSA官網
  • CompCert:一個經過充分驗證的 C 編譯器。支持幾乎所有的 C89 標準。GNU GPL2.1 或更高版本。官網
  • GCC:在它的編譯器集合中提供了 C 編譯器。支持 C11 和 OpenMP 的標準。GNU GPL3 或更高版本。官網
  • PCC:一個值得尊敬的 C 編譯器,支持 C99 標準。Various licenses,完全免費。官網
  • TCC:一個迷你,速度快的 C 編譯器,支持 C99(除了複雜的類型)。 LGPL2.1官網

加密

數據庫

下面列出了基於 C API 的數據庫和數據存儲

  • BerkeleyDB:一個高性能的嵌入式鍵值對數據庫。GNU AGPLv3官網
  • Hiredis:一個極簡的 Redis 客戶端。3-clause BSD官網
  • LMDB:一個極快,極簡的嵌入式鍵值對數據存儲系統。newOpenLDAP官網
  • MariaDB:一個強壯,可擴展和可靠的 SQL 服務器,設計來作爲 MySQL 的替代品。3-clause BSD官網
  • mongo-c-driver:一個高性能的 MongoDB 客戶端。Apache2.0.官網
  • PostgreSQL:一個強大的對象關係數據庫系統。PostgreSQL licence官網
  • recutils:一個工具和 C 庫的集合,用於訪問可編輯,純文本的名爲 recfiles 的數據庫文件。GNU GPL3 或更高版本。官網
  • Redis:一個先進的鍵值對存儲系統。3-clause BSD官網
  • sophia:一個現代,可嵌入的鍵值對數據庫。FreeBSD官網
  • SQLite:一個自包含,無服務器,零配置,支持事務的 SQL 數據庫引擎,包括 C 接口。公開領域。官網
  • UnQLite:一個自包含,無服務器,零配置,支持事務的 NoSQL 數據庫引擎,包括 C 接口。FreeBSD官網

文檔生成

  • Cxref:生成 C 程序的文檔,支持 LaTeX,HTML, RTF 或者 SGML 的格式。GPL2.1官網
  • DocOnce:一種樸素的標籤標記語言,可以用來生成多種格式的文檔。BSD-3clause.官網
  • Doxygen:一個事實上的標準工具,用於從註釋的代碼中生成 C 文檔。能夠生成多種格式的文檔。GNU GPL2.1官網
  • GTK-Doc:一個從註釋的代碼中生成 C 文檔的工具,支持 Autotools GNU GPL2.1(代碼), GNU FDL1.1官網

編輯器

這些是特別精緻,IDE 類型的編輯器。如果你想要一個程序員的文本編輯器,看別的地方。此外,不管你選擇哪一款編輯器,它都支持 C。

環境

下面列出了被設計來引領 Windows 進入支持 C 的 21 世紀的技術。

框架

這一節包括提供數據結構的大型庫和你所期待“現代”的標準庫。

  • APR:Apache Portable Runtime;另一個跨平臺的實用函數庫。Apache2.0官網
  • C Algorithms:一個常用算法和數據結構的集合。官網
  • CPL:The Common Pipeline Library;一系列詳盡,高效和強壯的軟件工具包。GNU GPL2.1官網
  • EFL:一個大型實用數據結構和函數的的集合。多種許可證,完全免費。官網
  • GLib:一個便攜,高效和強大的實用函數和數據結構庫。GNU LGPL2.1官網
  • GIO:一個現代和易用的 VFS API。[GNU LGPL2.1]。官網
  • GObject:一個 C 的面向對象系統和對象模型。GNU LGPL2.1官網
  • libnih:一個輕量級的 C 函數和數據結構庫。GNU GPL2.1官網
  • libU:一個提供基本實用函數的迷你庫,包括內存分配,字符串處理和日誌功能。官網
  • PBL:一個包括實用函數,特色數據結構等的大型庫。GNU LGPL2.1及更高版本(庫),GNU GPL2.1及更高版本(測試代碼)。官網
  • qlibc:一個簡單且強大的 C 庫,當我們想要小且輕的庫時,可作爲 Glib 的替代品。qLib license (類似於 FreeBSD)。官網
  • stb:一系列單文件 C 庫。公共領域。官網
  • libcstl:標準C語言通用數據結構和常用算法庫。官網

遊戲編程

引擎

這些作爲 C 遊戲編程代碼的例子。

資源

這些是篩選過的,對遊戲編程有用的庫。

  • Allegro:一個跨平臺,視頻遊戲開發和多媒體庫。zlib官網
  • Chipmunk2D:一個快且輕量級的 2D 遊戲物理庫。Expat官網
  • CSFML:一個用 C 封裝的 SFMLzlib官網
  • FreeGLUT:一個替代性的 OpenGL 實用工具包。允許用 OpenGL 上下文創建和管理窗口。X11官網
  • GLFW:一個使用 OpenGL 上下文創建窗口的多平臺庫。zlib官網
  • libao:一個有多種輸出的跨平臺音頻庫。GNU GPL2.1及更高版本。官網
  • RetroArch:libretro 的參考前端。GNU GPL3官網
  • SDL:一個跨平臺庫,通過 OpenGL 提供音頻,鍵盤,鼠標,操縱桿和圖形硬件的底層訪問。zlib官網
  • SDL2:一個跨平臺庫,通過 OpenGL 提供音頻,鍵盤,鼠標,操縱桿和圖形硬件的底層訪問。這是最新版本。zlib官網

通用編程

  • klib:小且輕量級的常用算法和數據結構實現。Expat官網

圖形

GUI

這些具體來說就是控件工具包

JSON

  • Jansson:一個編碼,解碼和處理 JSON 的 C 庫。Expat官網
  • jsmn:一個極簡的 JSON 解析器。Expat官網
  • json-c:一個處理 JSON 的庫。Expat官網
  • WJElement:高級 JSON 處理庫,支持 JSON Schema。任意版本的 LGPL。官網
  • YAJL:一個很快的 JSON 流解析 C 庫。ISC官網

學習、參考和指南

下面列出了學習 C 編程的資源,或者跟 C 編程相關的有用的東西。

在線

參考

初級

中級

高級

自學教程

實體書

參考資料

初級

中級

高級

多媒體

  • FFMPEG:一個完整,跨平臺的錄音,轉換和流化視頻以及音頻的解決方案。GNU LGPL2.1 或更高版本,部分是 GNU GPL2.1 或更高版本。官網
  • GStreamer:一個聲音和可視化媒體的框架。GNU LGPL2.1官網
  • lodepng:一個簡單的 PNG 圖像解碼器和編碼器,不需要其他依賴。3-clause BSD.官網

網絡編程

Web框架

數值計算

  • apophenia:一個用於統計和科學計算的庫。GNU GPL2.1官網
  • ATLAS:自動調諧線性代數軟件。 3-clause BSD官網
  • BLAS:Basic Linear Algebra Subprograms;提供向量和矩陣操作的一系列操作。BLAS license官網
  • Cuba:一個計算多維的數值積分的庫。 GNU LGPLv3官網
  • FFTW:The Fastest Fourier Transform in the West;一個高度優化的快速傅立葉變換例程。GNU GPL2.1 或更高版本。官網
  • FLINT:Fast Library for Number Theory;一個支持算數,多項式,冪級數和矩陣等。GNU GPL2.1 或更高版本。官網
  • GLPK:GNU Linear Programming Kit;一個求解大規模線性規劃,混合整數規劃和其他相關問題。GNU GPL3 或更高版本。官網
  • GMP:GNU Multple Precision Arithmetic Library;一個支持任意精度計算的庫。雙重許可 GNU GPL2.1 GNU LGPLv3官網
  • GNU MPC:一個支持複雜數字計算的庫。GNU LGPL3 或更高版本。官網
  • GNU MPFR:一個支持任意精度的浮點數計算庫。GNU LGPL3 或更高版本(大多數最近版本),GNU LGPL2.1 或更高版本(2.4.x 之前)。官網
  • GNU MPRIA:一個支持多精度合理區間運算的可擴展數學庫。GNU GPL3 或更高版本。官網
  • GSL:The GNU Scientific Library;一個精確的數值計算庫。GNU GPL3官網
  • KISS FFT:一個非常快的傅里葉變換庫。3-clause BSD官網
  • LAPACKE:一個 LAPACK 的 C 接口。3-clause BSD官網
  • PARI/GP:一個數論的計算機代數系統,包括 C 編譯器。GNU GPL2.1 或更高版本。官網
  • PETSc:一系列數據結構和例程,用於計算由偏微分方程建模的應用程序的可擴展並行解。FreeBSD官網
  • SLEPc:一個在並行計算機中的解決大型,稀疏特徵值問題的軟件庫。LGPL3官網
  • Yeppp!:非常快,SIMD 優化的數學庫。 3-clause BSD官網

並行編程

  • cchan:一個線程間通信通道構建的小型庫。公共領域。官網
  • ck:併發原語,安全內存回收機制和非阻塞數據結構。FreeBSD官網
  • mill:用 C 寫成的 Go 風格併發。X11官網
  • MPICH:MPI 的另一種實現。MPICH licence官網
  • OpenMP:一組 C 編譯指令,使其易於並行化代碼。標準(許可不適用)。官網
  • OpenMPI:一個消息傳輸接口實現。3-clause BSD官網
  • PETSc:一系列數據結構和例程,用於計算由偏微分方程建模的應用程序的可擴展並行解。FreeBSD官網
  • pth:一個非搶佔式優先級調度多線程執行的可擴展實現。GNU GPL3 或者更高版本。官網
  • pthreads:POSIX 線程庫。標準(沒有適用的許可)。官網
  • SLEPc:一個在並行計算機中的解決大型,稀疏特徵值問題的軟件庫。GNU LGPL3官網
  • TinyCThread:一個可擴展,小型的 C11 標準線程 API 實現。zlib官網

正則表達式

有些人遇到問題時就會想:“啊,我知道了,我可以使用正則表達式”。於是現在他們有了兩個問題。- Jamie Zawinski。

序列化

  • c-capnproto:一個 Cap'n Proto 序列化協議的實現。 Expat官網
  • cmp:一個 MessagePack 序列化協議的實現。 Expat官網
  • libavro:一個 Avro 數據序列化系統的 C 實現。Apache2.0官網
  • mpack:另一個 MessagePack 序列化協議的實現。Expat官網
  • protobuf-c:一個 Google Protocol Buffer 的 C 實現。FreeBSD官網
  • xdr:External Data Representation;數據序列化標準。標準(沒有可用許可)。官網

源碼集錦

下面包含了一些小型源碼集合。如果你想要大型且成熟的,看《框架》那一節。

  • CCAN:模仿 Perl 的 CPAN,這是一個大的實用 C 代碼集合。完整的列表在 這裏。多種許可(所有都是免費軟件)。官網
  • clib:一個 C 軟件包管理器,配備了一堆自己的庫。 Expat官網
  • gnulib:通用 GNU 代碼的集合。多種許可證,全部免費。官網
  • libdjb:做各種事情的庫的集合。(顯然)公共領域。官網

標準庫

下面包括了標準 C 庫。

字符串處理

測試工具

  • CHEAT:一個非常簡單的單元測試框架。FreeBSD官網
  • Check:一個 C 的單元測試框架。GNU LGPL2.1官網
  • CMock:一個 C 的 mock/stub 生成器。官網
  • cmocka:一個支持 mock 對象的單元測試框架。Apache2.0官網
  • Criterion:一個 KISS 風格,非侵入式的 C 測試框架。Expat官網
  • CUnit:另一個 C 的單元測試框架。GNU LGPL2.0官網
  • minunit:極小的 C 單元測試框架。Expat官網
  • Unity:一個簡單的 C 單元測試框架。 Expat官網

文本編輯器擴展

在幾乎任何像樣的文本編輯器支持 C 之際,有一些擴展,讓編輯器更加令人愉快。下面是根據編輯器分目錄的。

Emacs

  • CEDET:Collection of Emacs Development Environment Tools;給 Emacs 提供一種類似 IDE 的特點,是內建的。GNU GPL3 或更高版本。官網
  • Flycheck:現代語法檢查。對於 C,它可以使用 GCC 或者 Clang 作爲後端。GNU GPL3 或更高版本。官網
  • Yasnippet:一個模板系統,支持 C 的通用代碼片段。GNU GPL3 或更高版本。官網

Vim

工具

下面是實用的程序列表,包括了幫助你編寫和調試 C 代碼的庫或者編譯器,不包括編輯器。

  • adlint:一個靜態分析器。支持完全的 C89 標準和部分 C99 標準。GNU GPL3 或更高版本。官網
  • Artistic Style:一個支持 C 的小而快的自動化代碼格式化工具。GNU LGPL3官網
  • address-sanitizer:一個很快的內存錯誤探測器。Apache2.0官網
  • biicode:一個現代的 C 依賴管理器。Expat官網
  • c:在命令行中編譯和執行 C 腳本,也支持 shebang。 Expat官網
  • c99sh:用 hash-bang 運行 C 文件。FreeBSD官網
  • CBMC:C Bounded Model Checker;一個檢查數組邊界,指針安全和用戶自定義斷言的工具。Original BSD官網
  • cdecl:一個在線服務,能夠把 C 的聲明翻譯成英文,反向也可以。公共領域。官網
  • cinclude2dot:在 C 項目中使用 Graphviz 的圖像包含依賴。任官網 GNU GPL 版本(根據文件中的要求)官網
  • Complexity:一個測量 C 代碼複雜性的工具。GNU GPL3 或更高版本。官網
  • DDD:各種命令行調試器的圖形前端。GNU GPL3 或更高版本。官網
  • fab:讓每次構建都最優的構建系統。GNU GPL3官網
  • GDB:The GNU Project debugger;一個 C 調試器。GNU GPL3 或更高版本。官網
  • Glade:一個讓 TK+ GUIs 開發更快的 RAD 工具。GNU GPL2.1官網
  • GMSL:GNU Make Standard Library;一個 GNU Make 額外功能的集合。3-clause BSD官網
  • GNU Global:一個 C 的源碼標籤工具。GNU GPL3官網 Global
  • gprof:一個性能分析工具。GNU binutils 的一部分。GNU GPL3 或更高版本。官網
  • Highlight:把源碼轉化爲高亮的格式化文本。GNU GPL3官網
  • include-what-you-use:幫助程序員發現不必要的包含和提供解決他們的建議。基於 LLVM/Clang(只能與它一起工作)。NCSA官網
  • indent:自動格式化 C 代碼,讓它更容易閱讀。也能把一種風格的代碼轉化爲另一種。GNU GPL3 或更高版本。官網
  • Make:一個控制程序的可執行和其他非代碼文件的生成的工具。GNU GPL3 或更高版本(鏈接到 GNU 的實現)。官網
  • qo:無需分開的配置文件的構建系統。Expat官網
  • rr:記錄非確定執行來允許可確定調試的調試器。FreeBSD官網
  • tup:一個很快,基於文件,跨平臺的構建系統。GNU GPL2.1官網
  • unifdef:移除 #ifdef 和 #if 指令包含的文本,不會改變文件的其他部分。3-clause BSD FreeBSD官網
  • Valgrind:各種動態分析工具,包括一個內存泄漏檢測工具。GNU GPL2.1官網

其他工具

下面是包羅萬象的目錄,主要是那些不適合放在其他目錄的東西。

  • ApeTagLibs:APEv2 標籤的 C 庫。Expat官網
  • bfd:處理二進制對象文件的庫。GNU binutils 的一部分。GNU GPL3 或更高版本。官網
  • ccv:基於C語言、帶緩存機制的現代計算機視覺核心庫。 3-clause BSD官網
  • cf4ocl:The C Framework for OpenCL;一個跨平臺面向對象框架,用於開發和用基準問題測試 OpenCL 項目。GNU LGPL3(庫), GNU GPL3(其他代碼)。官網
  • CommonMark:CommonMark 規範的 C 實現。Variety of licenses, all free官網
  • CException:異常的 C 實現。Expat官網
  • docopt.c:命令行選項解析器的 C 實現。Expat官網
  • dyncall:另一個外部函數接口庫。Expat官網
  • FANN:Fast Artifical Neural Network library;一個神經網絡的實現。GNU GPL2.1官網
  • Firm:一個 C 庫,提供了基於圖像中間表示,優化和適合編譯器的彙編代碼生成。配備了 C 的前端例子,使用相同的許可。GNU LGPLv2.1官網
  • gjrand:隨機數字生成的例程庫。GNU GPL2.1 或者 GNU GPLv3(用戶的選擇)。官網
  • GNU FreeIPMI:一個帶內和帶外的 IPMI 實現。GNU GPL3官網 FreeIPMI
  • GNU gperf:一個完美的哈希函數生成器,提供一系列的字符串。輸出 C 代碼。GNU GPL3 或更高版本。官網
  • GNU Libffcall:一個構建外部函數接口庫的集合。GNU GPL3 或更高版本。官網
  • gperftools:一系列測量和提高性能的實用工具集合。3-clause BSD官網
  • hammer:二進制格式的解析器組合。GPL2.1.官網
  • Hans Boehm GC:C 的垃圾收集器?如果我用了不要介意。多種許可證,完全免費。官網
  • huffandpuff:一個極小的哈夫曼編碼器和解碼器。公共領域。官網
  • iniparser:一個 .ini 文件的解析器。Expat官網
  • jemalloc:一個 malloc 實現,着重於段錯誤的避免和可擴展併發支持。FreeBSD官網
  • jwHash:一個很快的哈希表實現。Apache2.0官網
  • kdtree:KD-trees 的簡單庫。3-clause BSD官網
  • Kitsune:高效,通用的框架,用於軟件的動態升級。 GNU LGPL3 或更高版本。官網
  • libavl:一個包括各種自平衡二叉樹的庫。GNU GPL3 或更高版本。官網
  • libbson:BSON 實用庫。Apache2.0官網
  • libCello:引入高級語言給 C 的庫。官網
  • libcox:一個運行跨平臺系統調用和跨系統標準工具的庫。FreeBSD官網
  • libffi:輕量級的外部函數接口庫。Expat官網
  • libgit2:Git 的純 C 實現。GNU GPL2 only, with a linking exception官網
  • libimobiledevice:一個跨平臺協議庫,用於與 iThings 通信。GNU LGPLv2.1 或更高版本(庫),GNU GPL2.1 或更高版本(工具)。官網
  • libmpv:音樂播放庫。編譯的時候加入 ./waf configure --disable-cplayer --enable-libmpv-shared 來避免生成音樂播放器。GNU GPL2.1 或更高版本。官網
  • libnfc:一個平臺獨立的 NFC 庫。GNU LGPL3官網
  • libPhenom:事件框架,用於構建高擴展和高性能系統。Apache2.0官網GitHub
  • libsoundio:跨平臺,實時音頻輸入輸出的庫,有很多種後端。Expat官網
  • libucl:通用配置庫解析器。FreeBSD官網
  • libudp:一個統一設計模式的 C 實現。GNU GPL3 或更高版本。官網
  • libuv:跨平臺異步 I/O。Expat官網
  • libYAML:一個 YAML 1.1 解析器和發射器。 Expat官網
  • lzo:一個很快的數據壓縮庫。GNU GPL2.1官網
  • mpc:解析器組合庫。FreeBSD官網
  • ncurses:彩色的終端 UI 庫。GNU GPL3 或更高版本。官網
  • nope.c:一個基於 C 語言,超級輕量級的軟件平臺,用於可擴展服務端和網絡應用的開發(想想 C 程序員的 nodejs)。官網
  • pbc:一個協議緩衝庫。Expat官網
  • rabbitmq-c:RabbitMQ 的客戶端庫。Expat官網
  • Ragel:爲編譯C的狀態機的DSL。GNU GPL2.1官網
  • uthash:哈希表實現,允許已經存在的數據結構很容易地存在哈希表裏面。1-clause BSD官網
  • Viola:libCello 的簡化版本。Expat官網
  • zlib:一個相當漂亮卻精緻不張揚的壓縮庫。3-clause BSD官網
  • Sundown:一個用C編寫的符合標準的、快速的、安全的源碼解析器。官網

XML

“XML 是垃圾。真的,沒有任何藉口。XML 對人類不友好的,甚至對於電腦來說也是一場災難。根官網 -Linus Torvalds

其他資源

有影響力的書

*具有廣泛影響且值得閱讀的 C 語言經典書籍。** 待補充

知名網站/博客

*值得關注的 C 語言技術站點和博客。*

中文

  • 待補充

英文

  • 待補充

微信公衆號

* CPP開發者:專注分享 C/C++ 開發相關的技術文章和工具資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章