C 語言資源大全中文版
我想很多程序員應該記得 GitHub 上有一個 Awesome:XXX 系列的資源整理。awesome-c 是 koz.ross 發起維護的 C 語言資源列表,內容包括了:構建系統、編譯器、數據庫、加密、初中高的教程/指南、書籍、庫等等。
Awesome 系列雖然挺全,但基本只對收錄的資源做了極爲簡要的介紹,如果有更詳細的中文介紹,對相應開發者的幫助會更大。這也是我們發起這個開源項目的初衷。
我們要做什麼?
- 基於 awesome-c 列表,我們將對其中的各個資源項進行編譯整理。此外還將從其他來源補充好資源。
- 整理後的內容,將收錄在伯樂在線資源頻道。可參考已整理的內容:
如何參與本項目?
從下面的目錄來看,本項目的工作量小不了,所以非常期待能有更多程序員一起來參與。
不過加入前,有幾個小要求:
- 英文還不錯,能讀懂英文並用自己的話複述;
- 在用 C 語言;
如有興趣,請加 QQ:50872495。加 Q 時請註明「C語言大全」。// 這不是 QQ 羣。
如何爲列表貢獻新資源?
歡迎大家爲列表貢獻高質量的新資源,提交PR時請參照以下要求:
- 請確保推薦的資源自己使用過
- 提交PR時請註明推薦理由
資源列表管理收到PR請求後,會定期(每週)在微博轉發本週提交的PR列表,並在微博上面聽取使用過這些資源的意見。確認通過後,會加入資源大全。
感謝您的貢獻!
本項目的參與者
注:名單不分排名,不定期補充更新
獎勵計劃
雖然獎勵可能並不是你加入的主要原因,但還是有必要提一下:
- 整理超過 20 個資源後,可在伯樂在線上開通打賞;
- 每整理 20 個資源,有機會獲得技術書籍或各種有意思的創意、極客產品;
- 獎勵詳情
目錄
- 構建系統
- 編譯器
- 加密
- 數據庫
- 文檔生成
- 編輯器
- 環境
- 框架
- 遊戲編程
- 通用編程
- 圖形
- GUI
- JSON
- 學習、參考和指南
- 多媒體
- 網絡編程
- 數值計算
- 並行編程
- 正則表達式
- 序列化
- 源碼集錦
- 標準庫
- 字符串處理
- 測試工具
- 文本編輯器擴展
- 工具
- 其他工具
- XML
- 其他資源
構建系統
下面是一些 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。官網
加密
- GnuTLS:一個安全通信庫,實現了 SSL,TLS 和 DTLS。GNU GPL2.1 或更高版本。官網
- libgcrypt:一個通用的密碼庫,支持多種加密方法。 GNU LGPL2.1 (代碼),GNU GPL2.1 或更高版本(說明書和工具)。官網
- OpenSSL:一個 SSL 和 TLS 協議的實現,還包括一個加密庫。Dual Licensed under the OpenSSL License and the SSLeay License。官網
- libsodium:一個現代,易用的加密庫。Expat。官網
- libtomcrypt:一個相當全面,模塊化和可移植的工具集。公開領域。官網
- mbed TLS:一個 C 實現的加密庫。Apache2.0。官網
數據庫
下面列出了基於 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。
- Anjuta DevStudio:GNOME IDE。 GNU GPL2.1。官網
- Code::Blocks:一個可擴展,可配置的 IDE,支持 C。GNU GPL3。官網
- CodeLite:一個跨平臺的 IDE。 GNU GPL2.1。官網
- Eclipse:一個用 Java 寫成的 IDE。 EPL。官網
- Geany:一個很小很快的 IDE。 GNU GPL2.1及更高版本。官網
- KDevelop:KDE IDE. GNU GPL2.1。官網
環境
下面列出了被設計來引領 Windows 進入支持 C 的 21 世紀的技術。
- Cygwin:被設計用於在 Windows 下模擬 POSIX 兼容環境。Various licenses, all free。官網
- MinGW-w64:一個 Windows 下極簡的 C 開發環境,支持 64 位。Various licenses, all free。官網
框架
這一節包括提供數據結構的大型庫和你所期待“現代”的標準庫。
- 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 遊戲編程代碼的例子。
- Corange:一個純 C 的遊戲引擎。FreeBSD。官網
- Darkplaces:一個 Quake2 引擎的修改版本。GNU GPL2.1。官網
- ioquake3:Quake3 引擎,終於免費啦。GNU GPL2.1。官網
- Orx:一個便攜,輕量級,插件化,數據驅動,面向 2D 的遊戲引擎。zlib。官網
- Quake2:Quake2 引擎。GNU GPL2.1。官網
- Spearmint:一個爲 FPS 遊戲設計的引擎。GNU GPL3及更高版本。官網
資源
這些是篩選過的,對遊戲編程有用的庫。
- Allegro:一個跨平臺,視頻遊戲開發和多媒體庫。zlib。官網
- Chipmunk2D:一個快且輕量級的 2D 遊戲物理庫。Expat。官網
- CSFML:一個用 C 封裝的 SFML。zlib。官網
- FreeGLUT:一個替代性的 OpenGL 實用工具包。允許用 OpenGL 上下文創建和管理窗口。X11。官網
- GLFW:一個使用 OpenGL 上下文創建窗口的多平臺庫。zlib。官網
- libao:一個有多種輸出的跨平臺音頻庫。GNU GPL2.1及更高版本。官網
- RetroArch:libretro 的參考前端。GNU GPL3。官網
- SDL:一個跨平臺庫,通過 OpenGL 提供音頻,鍵盤,鼠標,操縱桿和圖形硬件的底層訪問。zlib。官網
- SDL2:一個跨平臺庫,通過 OpenGL 提供音頻,鍵盤,鼠標,操縱桿和圖形硬件的底層訪問。這是最新版本。zlib。官網
通用編程
圖形
- Cairo:一個 2D 圖像庫。GNU LGPL2.1 或者 MPLv1.1。官網
- Cogl:一個 GPU 圖像和實用 API。Expat(依賴使用 3-clause BSD 許可,庫使用 LGPLv2.1 許可)。官網
- Clutter:一個基於 OpenGL 的 UI 庫。GNU LGPL2.1。官網
- heman:一個迷你圖像實用工具庫,處理高度圖,法線圖,距離場等。Expat。官網
- libcaca:一個基於終端接口的 ASCII 渲染器。WTFPLv2。官網
- libimagequant:小且輕量級的庫,用於高質量的從 RGBA 圖像到 8 位像素圖的轉換。FreeBSD。官網
- libjpeg-turbo:一個更快的讀寫 JPEG 文件庫。Various licences。官網
- libpng:官方 PNG 參考庫。libpng license。官網
- libxmi:一個光柵化 2D 位圖的函數庫。GNU GPL3 或更高版本。官網
- mozjpeg:一個提升 JPEG 圖像質量的編碼器。3-clause BSD。官網
- OpenGL:一個高性能圖像的工業標準,提供了原生 C語言 綁定。Various licenses。官網
- Craft:一個利用OpenGL使用C編寫的簡單MineCraft的克隆。官網、GitHub
GUI
這些具體來說就是控件工具包
- GTK+:一個跨平臺的控件工具包。GNU LGPL2.1。官網
- IUP:另一個跨平臺的控件工具包。Expat。官網
- Tk:一個基本控件工具包,Tcl/Tk 的一部分。Tcl/Tk License。官網
- XForms Toolkit:一個爲 XWindow 設計的控件工具包。GNU LGPL2.1。官網
JSON
- Jansson:一個編碼,解碼和處理 JSON 的 C 庫。Expat。官網
- jsmn:一個極簡的 JSON 解析器。Expat。官網
- json-c:一個處理 JSON 的庫。Expat。官網
- WJElement:高級 JSON 處理庫,支持 JSON Schema。任意版本的 LGPL。官網
- YAJL:一個很快的 JSON 流解析 C 庫。ISC。官網
學習、參考和指南
下面列出了學習 C 編程的資源,或者跟 C 編程相關的有用的東西。
在線
參考
- SEI CERT C 編碼標準
- C FAQ:comp.lang.c 常見問題
- GNU/Linux 下 C/POSIX 標準庫實現的比較
- C11 標準草案
- GNU C 參考手冊
- Robert Pike 的 C 筆記
初級
- 指針教程
- C 語言指針 5 分鐘教程
- C 語言內存地址基礎
- C 語言函數指針基礎
- C 語言指針和數組基礎
- 構建 C 項目
- C 編程百科全書
- “有趣”的 C 介紹
- 用 GDB 學習 C
- POSIX 線程編程指南 (有點過時,但大部分還是有效和有用的)
- GNU C 編程指南 (在線 PDF)
- C 語言中的模板
中級
- 8 個你應該知道的 GDB 技巧
- 10 個 C99 技巧
- 深入併發:嘗試互斥鎖和原子操作
- OpenMP 介紹 (視頻)
- OpenMP 指南 (針對 OpenMP3 標準)
- memcpy 與 memmove 的比較
- MPI 指南
- C 語言中一些未知特性或者技巧
- 失落的 C 語言結構體封裝藝術
- C 程序員需要了解的內存知識
- 每個 C 程序員需要知道的未定義行爲知識
高級
- C 中的高級元編程
- 一個快速教程:如何實現和調試 malloc,free,calloc,和 realloc
- 位操作技巧
- 我不懂 C
- 在 C 語言中實現智能指針
- C 中的內聯函數
- C 中的自定義控制結構元編程
- 用 C 的宏解決臨時內存問題
- C 語言中一些不爲人知的角落
- 編寫高效的 C 和 C 代碼優化
自學教程
實體書
參考資料
- C: A Reference Manual 5E:C99 完全參考手冊
- C Pocket Reference:C99 簡明參考手冊
- The C Programming Language 2E:第一本 C 語言書籍,由 C 的創造者編寫。
初級
- C Primer Plus 6E:一個全面的 C11 編程指南。
- C Programming: A Modern Approach:一本極好的學習 C 基礎的書。
- Head First C:一本“深入淺出”風格的學習 C 的書籍。
中級
- 21st Century C:一本非常好的 C 語言書籍,可作爲第二選擇。
- Understanding and Using C Pointers:一本深入討論 C 指針的書。
- ZeroMQ:一本介紹如何用 C 使用 ZeroMQ 的書。
高級
- Expert C Programming: Deep C Secrets:一本從有趣,深度和娛樂的視角分析 C 內部結構的書籍。
多媒體
- FFMPEG:一個完整,跨平臺的錄音,轉換和流化視頻以及音頻的解決方案。GNU LGPL2.1 或更高版本,部分是 GNU GPL2.1 或更高版本。官網
- GStreamer:一個聲音和可視化媒體的框架。GNU LGPL2.1。官網
- lodepng:一個簡單的 PNG 圖像解碼器和編碼器,不需要其他依賴。3-clause BSD.官網
網絡編程
- asnlc:一個把 ASN.1 規範轉換爲 C 代碼的編譯器。FreeBSD。官網
- czmq:一個 ZeroMQ 的高級綁定。官網
- GNU adns:一個高級,易用,異步的 DNS 客戶端和實用工具。GNU GPL3 及更高版本。官網
- GNU SASL:一個簡單身份認證和安全層和一些常見 SASL 機制的實現。GNU GPL3 及更高版本。官網
- GnuTLS:一個安全通信庫,實現了 SSL,TLS 和 DTLS。GNU LGPL2.1 及更高版本。官網
- gumbo-parser:一個 C99 標準的 HTML5 解析庫。Apache2.0。官網
- http-parser:一個 HTTP 請求迴應解析器。Expat。官網
- ldns:一個簡化 DNS 編程的庫。3-clause BSD。官網
- libcurl:一個客戶端的 URL 轉換庫,支持多種格式。curl license。官網
- LibEtPan:一個郵件庫,支持 IMAP,SMTP,POP 和 NNTP 網絡協議。3-clause BSD。官網
- libev:一個事件驅動庫。FreeBSD.官網
- libevent:一個在網絡服務器中事件驅動庫的可替代品。3-clause BSD。官網
- libgss:通用安全服務。GNU GPL3 或更高版本。官網
- libhttpd:一個給應用或嵌入式設備添加基本 Web 服務器功能的庫。GNU GPL2。官網
- libidn:Stringprep,Punycode 和 IDNA 規範的實現。GNU GPL3 或更高版本。官網
- libmicrohttpd:一個迷你庫,可作爲其他應用的一部分,讓運行 HTTP 服務器變得簡單。GNU LGPL2.1 或更高版本。官網
- libsoup:一個 GNOME HTTP 客戶端/服務器庫,使用了 GObject。GNU LGPL2.1。官網
- lwan:一個實驗性,可擴展,高性能的 HTTP 服務器。 GNU GPL2.1。官網
- mongoose:基於 C 的嵌入式 Web 服務器。GNU GPL2.1。官網
- nanomsg:一個基於 C 的 ZeroMQ 實現。Expat。官網
- onion:易於使用的 HTTP 服務器庫。Apache2.0。官網
- OpenSSL:一個 SSL 和 TLS 協議的實現,還包括一個加密庫。Dual Licensed under the OpenSSL License and the SSLeay License。官網
- oSip:一個基於 C 的 SIO 實現,沒有額外的依賴。GNU LGPLv2.1 或更高版本。官網
- s2n:一個 C99 標準的 TLS/SSL 協議的實現,簡單,快並且以安全優先。Apache2.0。官網
- socket99:BSD 套接字 API 的 C99 封裝。ISC。官網
- Tox:一個通信平臺,被設計爲 Skype 殺手。GNU GPL3。官網
- twitc:一個與 Twitter OAuth API 交互的迷你 C 庫。Expat。官網
Web框架
- balde:一個基於 GLib 的 C 微框架。 GNU LGPLv2.1。官網
數值計算
- 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。
- PCRE:與 Perl 5 正則表達式完全相同的實現。3-clause BSD。官網
- SLRE:Super Light Regular Expression library;一個 Perl 正則表達式語法子集的迷你實現。GNU GPL2.1。官網
- TRE:一個與 POSIX 一致,充滿特色的正則表達式庫。FreeBSD。官網
- PS:關於正則表達式,deerchao 有篇文章不錯 《正則表達式 30 分鐘入門教程》
序列化
- 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 庫。
- Bionic:谷歌爲 Android 開發的 C 標準庫。3-clause BSD。官網
- dietlibc:標準 C 庫,可能是最小的二進制文件。GNU GPL2.1。官網
- glibc:GNU C 庫。一個 C 標準庫的實現。 GNU LGPL2.1。官網
- musl:標準 C 庫,兼容 POSIX 2008 和 C11,爲靜態鏈接設計。Expat。官網
字符串處理
- bstrlib:更好的字符串處理庫。雙重許可,3-clause BSD 或 GNU GPL2.1。官網
- ICU:International Components for Unicode;提供 Unicode 支持的庫。 ICU license。官網
- libunistring:處理 Unicode 字符串的 C 庫。GNU LGPL3。官網
- libgiconv:文本轉換庫。GNU LGPL2.1(庫),GNU GPL3(編碼轉換程序)。官網
- SDS:Simple Dynamic Strings;一個用簡單方式處理 C 字符串的庫,而且兼容標準 C 字符串函數。可通過 clib 使用。FreeBSD。官網
- shoco:一個小型文本壓縮器。Expat。官網
- smaz:一個高效的字符串壓縮庫。3-clause BSD.官網
測試工具
- 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
- Syntastic:語法檢查和語言分析。Do What The Fuck You Want To license。官網
- YouCompleteMe:一個 Vim 的代碼補全引擎。GNU GPL3。官網
工具
下面是實用的程序列表,包括了幫助你編寫和調試 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
- Expat:面向流的 XML 解析器。Expat。官網
- libxml2:一個符合標準,輕量級的 XML 解析器。Expat。官網
- mini-xml:小型 XML 讀寫庫。沒有 C 標準庫的依賴。GNU LGPL2.1 with static linking exception。官網
其他資源
有影響力的書
*具有廣泛影響且值得閱讀的 C 語言經典書籍。** 待補充知名網站/博客
*值得關注的 C 語言技術站點和博客。*中文
- 待補充
英文
- 待補充