C 語言資源大全中文版
來自: https://github.com/jobbole/awesome-c-cn?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
C 語言資源大全中文版
我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列的資源整理。 awesome-c 是 koz.ross 發起維護的 C 語言資源列表,內容包括了:構建系統、編譯器、數據庫、加密、初中高的教程/指南、書籍、庫等等。
Awesome 系列雖然挺全,但基本只對收錄的資源做了極為簡要的介紹,如果有更詳細的中文介紹,對相應開發者的幫助會更大。這也是我們發起這個開源項目的初衷。
我們要做什么?
- 基于 awesome-c 列表,我們將對其中的各個資源項進行編譯整理。此外還將從其他來源補充好資源。
- 整理后的內容,將收錄在 伯樂在線資源頻道 。可參考已整理的內容:
如何參與本項目?
從下面的目錄來看,本項目的工作量小不了,所以非常期待能有更多程序員一起來參與。
不過加入前,有幾個小要求:
- 英文還不錯,能讀懂英文并用自己的話復述;
- 在用 C 語言;
如有興趣,請加 QQ:50872495。加 Q 時請注明「C語言大全」。// 這不是 QQ 群。
本項目的參與者
注:名單不分排名,不定期補充更新
目錄
- 構建系統
- 編譯器
- 加密
- 數據庫
- 文檔生成
- 編輯器
- 環境
- 框架
- 游戲編程
- 引擎
- 資源
- 通用編程
- 圖形
- GUI
- JSON
- 學習、參考和指南
- 在線資源
- 參考
- 初級
- 中級
- 高級
- 自學資源
- 實體書
- 參考
- 初級
- 中級
- 高級
- 在線資源
- 多媒體
- 網絡編程
- Web 框架
- 數值計算
- 并行編程
- 正則表達式
- 序列化
- 源碼集錦
- 標準庫
- 字符串處理
- 測試工具
- 文本編輯器擴展
- Emacs
- Vim
- 工具
- 其他工具
- 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(除了復雜的類型)。 GNU 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 的格式。 GNU GPL2.1
- DocOnce - 一種樸素的標簽標記語言,可以用來生成多種格式的文檔。 3-clause BSD .
- 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 。
通用編程
- klib - 小且輕量級的常用算法和數據結構實現。 Expat 。
圖形
- 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 。
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 - 一個與 推ter 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 - 一個在并行計算機中的解決大型,稀疏特征值問題的軟件庫。 GNU 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 。
- 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-based/Cached/Core Computer Vision library;現代計算機視覺。 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 。
- GNU gperf - 一個完美的哈希函數生成器,提供一系列的字符串。輸出 C 代碼。 GNU GPL3 或更高版本。
- GNU Libffcall - 一個構建外部函數接口庫的集合。 GNU GPL3 或更高版本。
- gperftools - 一系列測量和提高性能的實用工具集合。 3-clause BSD 。
- hammer - 二進制格式的解析器組合。 GNU 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 。
- 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 。
XML
“XML 是垃圾。真的,沒有任何借口。XML 對人類不友好的,甚至對于電腦來說也是一場災難。根本就沒有這個可怕的垃圾存在的理由” -Linus Torvalds
- Expat :面向流的 XML 解析器。 Expat 。 官網
- libxml2 - 一個符合標準,輕量級的 XML 解析器。 Expat 。
- mini-xml :小型 XML 讀寫庫。沒有 C 標準庫的依賴。 GNU LGPL2.1 with static linking exception 。 官網
-
其他資源
有影響力的書
具有廣泛影響且值得閱讀的 C 語言經典書籍。
- 待補充
知名網站/博客
值得關注的 C 語言技術站點和博客。
中文
- 待補充
英文
- 待補充
微信公眾號
-
CPP開發者:專注分享 C/C++ 開發相關的技術文章和工具資源。
</ul> </article>