源码集合
小型源码集合。如果你想要大型且集成的项目,请查看
- stb - 一系列单文件库。公有领域。
- clib - 类似包管理器。自带[一批自己的库][27]。
- tinyheaders - 仅头文件库集合,主要面向游戏开发。
- mmx - 单头文件库集合。多种许可证,均为开源。
- zpl - C99 跨平台仅头文件库,包含许多实用功能。
- par - 一批单文件库。
- Snippets - 有用的代码片段和仅头文件库。公有领域。
- CCAN - 仿照 Perl 的 CPAN 设计,这是一个包含各种功能代码的大型集合。完整列表见[此处][104]。多种许可证,均为开源。
- gnulib - 常见 GNU 代码集合。多种许可证,均为开源。
- libdjb - 实现各种功能的库集合。(据称)属于公有领域。
文本编辑器扩展
虽然几乎所有像样的程序员文本编辑器都支持 C,但仍有一些
- YouCompleteMe - Vim 的代码补全引擎。
- Syntastic - Vim 的语法检查和 lint 工具。
- Neomake - Neovim/Vim 的异步 :make 和 lint 框架。
- Flycheck - Emacs 的现代语法检查。对于 C,可使用 GCC 或 Clang 作为后端。
- CCompletion - Notepad++ 自动补全插件。适用于 Ctags 识别的所有标识符。此为下载链接。
- CEDET - Emacs 开发环境工具集;旨在为 Emacs 提供类似 IDE 的功能。内置。
- YASnippet - Emacs 代码模板系统,包含常见代码片段的 C 模板。
数据库
提供 C API 的数据库和数据存储。
- TDengine - 高性能、云原生时间序列数据库。
- MySQL - 世界上最流行的开源数据库。
- Hiredis - 极简的 Redis 客户端库。
- FlashDB - 支持键值和时间序列数据的超轻量级数据库。
- sparkey - 简单的常量键/值存储库。专为读密集、不频繁的大批量插入而设计。
- Groonga - 具有全文搜索的列式存储。
- WhiteDB - 轻量级数据库库,完全在主内存中运行。
- BerkeleyDB - 高性能嵌入式键值数据库的库。
- DuckDB - 快速进程内分析数据库,具有 C API。[
MIT][MIT] - EJDB2 - 可嵌入的 JSON 数据库引擎。
- libmongoc - 高性能 [MongoDB][234] 客户端库。
- LMDB - 超快、超紧凑的嵌入式键值数据存储。
- PostgreSQL - 强大的对象关系数据库系统。
- Redis - 高级键值存储。
- sophia - 现代、可嵌入的键值数据库。
- SQLite - 自包含、无服务器、零配置、事务性 SQL 数据库引擎。公有领域。
- UnQLite - 自包含、无服务器、零配置、事务性 NoSQL 引擎。
实用工具
一个“包罗万象”的类别,用于收纳任何其他类别都不太合适的内容。
- cosmopolitan - 快速、可移植、静态的原生文本模式容器(一次构建即可在 Linux\Mac\Windows 上运行 C 程序)[多种许可证,均为开源][224]。
- libimobiledevice - 用于与 iThings 通信的跨平台协议库。
- CommonMark - CommonMark 规范的实现。
- libpostal - 用于解析和规范化世界各地街道地址的库。由统计 NLP 和开放地理数据驱动。
- EasyLogger - 超轻量、高性能的 C/C++ 日志库。
- linenoise - readline 和 libedit 的小型、自包含替代品。
- cpu_features - 在运行时获取 CPU 特性。[
Apache-2.0][Apache-2.0]。 - libcmark - 用于解析 Markdown 的 CommonMark 方言的库。
- termbox - 用于编写基于文本界面的库。
- libnfc - 平台无关的近场通信库。
- tinyexpr - 微型递归下降解析器、编译器和求值引擎,用于简单数学表达式。
- rabbitmq-c - [RabbitMQ][229] 的客户端库。
- pbc - Protocol buffers 库。
- Datatype99 - C99 的代数数据类型。
- Metalang99 - 完整的预处理器元编程。
- Hoedown - 完全符合标准、支持扩展、感知 UTF-8、快速的 Markdown 解析器。
- libcoap - [受限应用协议][117] 的实现。[
GPL-2.0-or-later][GPL-2.0-or-later] 或 - argparse - 命令行参数解析库,灵感来自 Python 的 argparse 模块。
- nope.c - 超轻量软件平台,用于可扩展的服务器端和网络应用(可视为面向 C 程序员的 node.js)。
- whereami - 单文件库,用于定位文件系统中的当前可执行文件。
- sort - 排序例程集合,在编译期根据用户定义类型进行类型特化。
- progressbar - 易用的文本进度条显示库。
- docopt.c - 命令行选项解析器的实现。
- zproto - ZeroMQ 的协议框架。
- parg -
getopt的单文件重实现,提供更合理的默认行为。 - microlog - 可扩展、可配置的日志库,支持主题,适用于嵌入式与桌面环境。
- netbsd-curses - ncurses 的简化小型版本,接口相同。
- obj.h - 单头文件,在纯 C 中支持面向对象编程。
- libgeohash - Geohash 算法的纯 C 实现。
- Caffeine - 用于为 Linux 和 FreeBSD 系统构建守护进程和服务的库。
- libvldmail - 友好的电子邮件验证库。无外部依赖(甚至不依赖正则表达式)。
- dlx - [Knuth 的算法 X][389] 的实现,附带示例求解器。
- Rogueutil - 跨平台库,用于创建基于文本的用户界面(TUI)。
- tm - ⏱ C 语言的定时器和时间线工具。
- xlsx_drone - 快速的 Microsoft Excel *.xlsx 读取器。[
MIT][MIT] - libXDGdirs - XDG 基础目录规范的实现。
- ApeTagLibs - 用于处理 APEv2 标签的库。
- libffi - 可移植的外部函数接口库。
- attr - 用于操作文件系统扩展属性的命令。
- bfd - 用于操作二进制目标文件的库。属于 GNU binutils 的一部分。
- CException - 异常的实现。
- CRIU - 用户空间检查点/恢复;一种软件工具(带有 C API),用于将正在运行的应用程序“冻结”到磁盘,然后恢复。[
GPL-2.0-only][GPL-2.0-only] 或 - D-Bus - 应用程序之间相互通信的简单方式。[
AFL-2.1][AFL-2.1] 或 - Discount - Markdown 解析器的简单实现。
- dyncall - 另一个外部函数接口库。
- GNU FreeIPMI - 带内和带外 IPMI 实现。
- GNU gperf - 完美哈希函数生成器,给定字符串列表,输出 C 代码。
- GNU Libffcall - 用于构建外部函数接口的库集合。
- Kitsune - 高效、通用的动态软件更新框架。
- libCello - 为 C 语言引入更高级编程的库。
- libcox - 允许跨不同操作系统进行跨平台系统调用和标准实用程序的库。
- libgit2 - Git 核心方法的可移植实现,以可重入的可链接库形式提供。[自定义许可证][41]。
- libgss - 通用安全服务。
- libtrading - 用于与交易所、暗池和其他交易场所通信的网络协议实现。支持 FIX、FIX/FAST 和许多专有协议。
- libusb - 提供对 USB 设备的通用访问。
- libuv - 跨平台异步 I/O。
- MegaMimes - 用于获取文件 [MIME][30] 类型的库。
- ncurses - 彩色终端 UI 库。
- Ragel - 状态机 DSL,可编译为 C 代码。
- rmw - 命令行安全删除工具,可在指定天数后清除回收站中的项目。
- Tulip Indicators - 金融数据技术分析函数库。
- XLSX I/O - 跨平台库,用于读写 .xlsx 文件。
- zlog - 可靠、纯 C 的日志库。
压缩
- Brotli - 通用无损压缩算法库。速度与 DEFLATE 相当,但压缩比更高。[
MIT][MIT]。 - libarchive - libarchive 是一个可移植、高效的 C 库,可读写多种格式的流式归档。
- CRoaring - [Roaring bitmaps][482] 的 C 实现。
- zip - 非常非常小的 zip 归档处理库。
- heatshrink - 面向嵌入式与实时系统的数据压缩/解压缩库。
- FiniteStateEntropy - 两种针对现代 CPU 优化的高效压缩编解码器。
- smaz - 高效字符串压缩库。
- DENSITY - 超快压缩库。
- TurboPFor - 最快的整数压缩。
- pixz - 并行、索引式 xz 压缩器。
- Lizard - 原为 LZ5;一种解压速度极快的高效压缩器。在 1000MB/s 及更快的解压速度下,压缩比可与 zip 和 zlib 相媲美。
- fastLZ - 极速无损压缩库(LZ77 类型)。可嵌入 ARM Cortex-M 等小型目标平台。源码可直接嵌入项目(一对 h/c 文件),无需动态内存分配。
- SIMDComp - 使用二进制打包压缩整数列表的简单库。在 x86 上利用 SIMD 指令。
- squash - 压缩抽象库,附带一些实用工具。
- libzip - 用于读取、创建和修改 zip 归档的 C 库。
- TurboRLE - 最高效的游程编码。
- fast_zlib - 改进版 zlib,运行速度快 2 至 10 倍。
- huffandpuff - 极简 Huffman 编码器与解码器。公有领域。
- zlib-ng - 针对“下一代”系统优化的 zlib 替代品。
- blosc - 极快、多线程的元压缩器库。多种许可证,均为开源。
- clzip - 高质量数据压缩器 [Lzip][433] 的 C 版本(LZMA 实现)。
- libbzip2 - 无专利、高质量的数据压缩库。
- lz4 - 用于极速压缩算法的库。
- lzo - 快速数据压缩库。
- shoco - 用于小型文本字符串的压缩器。
- Zlib - 极其出色却又细致低调的压缩库。
- Zstandard - 快速、无损压缩算法,面向实时压缩场景,压缩比达到 zlib 水平或更优。
游戏编程
专门用于制作游戏的引擎、库和其他有用资源。
- RetroArch - [libretro][232] 的参考前端。
- Flecs - 为 C89 和 C99 编写的多线程实体组件系统
- Quake - Quake 引擎。
- Quake2 - Quake2 引擎。
- cglm - 📽 针对 C 优化的 OpenGL/图形数学(glm)库。
- Corange - 纯 C 语言游戏引擎。
- librg - 纯 C99 游戏网络库,用于构建简单优雅的跨平台多人客户端-服务器解决方案。
- sdl-gpu - 用于高性能现代 2D 图形的库。基于 SDL。
- exengine - C99 编写的 3D 游戏引擎,附带起始模板。
- MATHC - 用于 2D 和 3D 编程的数学库。
- Epoxy - 用于处理 OpenGL 函数指针管理的库。
- kazmath - 游戏数学库。
- astera - C99 跨平台 2D 游戏库
- AssetKit - 🎨 基于 COLLADA/glTF 规范的 3D 资源导入/导出/工具库
- cmt - 🎮 Apple 的 METAL 图形框架的 C 绑定/封装。
- uastar - 极简 A* 实现。
- Freecell Solver - 用于自动求解 FreeCell 及类似纸牌变体的库和命令行程序集合。
- Allegro - 跨平台视频游戏开发和多媒体库。
- Chipmunk2D - 快速且轻量的 2D 游戏物理库。
- CSFML - [SFML][91] 的绑定。
- Darkplaces - Quake2 引擎的修改版本。
- FreeGLUT - OpenGL Utility Toolkit 的替代品。允许创建和管理带有 OpenGL 上下文的窗口。
- GLFW - 用于创建 OpenGL 上下文窗口的多平台库。
- ioquake3 - Quake3 引擎,终于自由了。
- libao - 跨平台音频库,支持多种输出。
- Orx - 可移植、轻量、基于插件、数据驱动、面向 2D 的游戏引擎。
- raylib - 简单易用的库,用于学习视频游戏编程。
- SDL2 - 跨平台库,旨在通过 OpenGL 提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。
- SIGIL - 声音、输入和图形集成库;是其他库完成这些功能的简单替代方案。多种许可证,均为开源。
工具
帮助编写和调试 C 代码的有用程序(非编辑器),
- address-sanitizer - 快速内存错误检测器。
- include-what-you-use - 帮助查找不必要的包含并提出修复建议。基于 LLVM/Clang(且仅适用于它)。
- c - 在命令行中一步编译并执行 C "脚本"。也支持 shebang。
- incbin - 轻松将二进制文件包含到 C/C++ 应用程序中
- SMACK - 模块化软件验证工具链及独立软件验证器。目前仅适用于使用 Clang 编译的程序。
- c99sh - 使用 hash-bang 运行 C 文件。
- Artistic Style - 快速且小巧的自动源代码格式化工具,支持 C。
- bcc - 字节数组生成器,可像 xxd 一样直接从 C 导入二进制文件。
- cdecl - 将 C 声明翻译成英文及反向翻译的在线服务。公有领域。
- cinclude2dot - 使用 Graphviz 生成项目中的依赖关系图。[GPL-1.0-or-later][335] 或 [
GPL-2.0-or-later][GPL-2.0-or-later] 或 - ClangCheck - 静态分析工具,设计用于与 Clang 配合使用。
- conan.io - 类似 C 的包管理器。[
MIT][MIT]。 - Cppcheck - 静态分析工具。尽管名称如此,但对 C 支持良好。
- Glade - 用于快速开发 GTK+ 图形界面的 RAD 工具。
- GMSL - GNU Make 标准库;为 GNU Make 提供额外功能的集合。
- GNU Global - 源代码标记工具。
- GPP - 通用预处理器。比 C 预处理器更通用,但比 m4 更灵活。
- Highlight - 将源代码转换为带精美高亮的格式化文本。
- indent - 自动格式化 C 源代码以使其更易读。也可将一种源码风格转换为另一种。
- unifdef - 移除 #ifdef 和 #if 指令及其限定文本,而不触碰文件的其他部分。[
BSD-3-Clause][BSD-3-Clause] 或
图形用户界面
小部件工具包,或旨在以类似方式使用的东西。
- nuklear - 小巧的 C89 单头文件控件工具包,公有领域。
- microui - 用可移植 ANSI C 编写的极简即时模式 UI 库。
- luigi - 一个极简的单头文件 GUI 库,支持 Win32、X11 和 Essence。
- GTK+ - 跨平台控件工具包。
- IUP - 另一个跨平台控件工具包。
- nappgui - 使用 C 语言构建跨平台桌面应用的专业 SDK。
- tinyfiledialogs - 用于简单对话框的单文件库,兼容许多其他工具包和操作系统。
- Tk - 基础控件工具包,是 Tcl/Tk 的一部分。
- XForms Toolkit - 为 XWindow 系统设计的控件工具包。
- LVGL - 嵌入式 GUI,具有易用的图形元素、美观的视觉效果和低内存占用。
网络与互联网
底层网络和互联网相关内容。如果你想要更高级的……
- libzmq - 核心 ZeroMQ 库,一个高性能异步消息传递库,旨在用于分布式或并发应用程序。C API(后端 C++)[
GPL-3.0-or-later][GPL-3.0-or-later],带有静态链接例外。 - libhv - 跨平台事件循环库。
- nanomsg - 基于 C 的 ZeroMQ 实现。
- gumbo-parser - C99 编写的 HTML5 解析库。
- libpcap - API 提供对各种内核数据包捕获机制的访问。
- Dyad.c - 轻量、易用、异步网络库。
- LibVNCServer - 实现 VNC 服务器和/或客户端功能的跨平台库。
- zyre - 基于邻近性的点对点应用框架。
- MQTT-C - 适用于嵌入式系统和 PC 的可移植 MQTT C 客户端。
- libuhttpd - 基于 libev 和 http-parser 的非常灵活、轻量且完全异步的 HTTP 服务器库,适用于嵌入式 Linux。
- CHL - C Hypertext Library——用于在 C 语言中编写 Web 应用程序的库。
- socket99 - BSD sockets API 的 C99 封装。
- silgy - 用于 C/C++ 项目的异步 HTTP(S) 引擎。
- twitc - 用于与 Twitter OAuth API 交互的迷你库。
- asnlc - 将 ASN.1 规范编译为 C 源代码的编译器。
- czmq - ZeroMQ 的高级绑定。
- GNU adns - 高级、易用、支持异步的 DNS 客户端库和工具。
- H20 - 新一代 HTTP 服务器。
- llhttp - HTTP 请求/响应解析器。
- ldns - 简化 DNS 编程的库。
- libcurl - 客户端 URL 传输库,支持多种格式。
- LibEtPan - 邮件库,为 IMAP、SMTP、POP 和 NNTP 提供高效网络。
- libev - 又一个事件循环。
- libevent - 用于网络服务器的事件循环替代方案。
- libhttpd - 为应用程序或嵌入式设备添加基本 Web 服务器功能的库。
- libidn - Stringprep、Punycode 和 IDNA 规范的实现。
- libmicrohttpd - 小型库,可轻松将 HTTP 服务器作为其他应用程序的一部分运行。
- libnl -
libnl是一个库集合,为 Netlink 协议提供 API(ioctl 的替代方案)。其主要用途是与 Linux 内核通信,以修改网络状态(接口、路由等)。 - libonion - HTTP 服务器库,设计为易于使用。
- libquickmail - 旨在为开发者提供从应用程序发送电子邮件的库。支持多个收件人/抄送/密送收件人以及无大小限制的附件。
- libsagui - 用于跨平台 HTTP 服务器的库。
- libwebsock - 易用且强大的 WebSocket 库。
- lwan - 实验性、可扩展、高性能 HTTP 服务器。
- mongoose - 嵌入式 Web 服务器。
- NNG - nanomsg-next-generation - 轻量级无代理消息传递。
- oSip - 无额外依赖的 SIP 实现。
- uriparser - 严格符合 RFC 3986 的 URI 解析和处理库。
- Wslay - WebSocket 库。实现 RFC 6455 中描述的 WebSocket 协议第 13 版。
性能分析
- gperftools - 用于测量和改进性能的工具集合。
- gprof - 性能分析工具。GNU binutils 的一部分。
- OProfile - Linux 统计剖析器。可以低开销且无需重新编译地剖析任何代码(包括内核!)。
- perf - 基于 Linux 内核的性能分析器,功能丰富。
图形
在 C 中以编程方式操作图形;如果你想制作 GUI,
- mozjpeg - 改进的 JPEG 编码器。
- nanovg - 基于 OpenGL 的抗锯齿 2D 矢量绘图库,用于 UI 和可视化。
- libsixel - 实现 SIXEL 协议的库,让终端显示精美图形。
- lightmapper - 单文件库,用于光照贴图烘焙,使用现有 OpenGL 渲染器。公有领域。
- libgd - 供程序员动态创建图像的库。
- libcaca - 用于终端界面的 ASCII 渲染器。
- PlutoVG - 独立的 C 语言 2D 矢量图形库
- heman - 处理高度图、法线贴图、距离场等的微型图像工具库。
- AssetKit - 🎨 基于 COLLADA/glTF 规范的 3D 资源导入/导出/工具库
- cmt - 🎮 Apple 的 METAL 图形框架的 C 绑定/封装。
- Cairo - 2D 图形库。[
LGPL-2.1-only][LGPL-2.1-only] 或 [MPL-1.1][385]。 - giflib - 用于读写 GIF 图像的库。
- graphene - 图形数据类型的薄层。
- libimagequant - 小型可移植库,用于将 RGBA 图像高质量转换为 8 位索引颜色图像。
- libjpeg-turbo - 更快的 JPEG 文件读写库。[多种许可证][194]。
- libpng - 官方 PNG 参考库。
- libRSVG - 使用 Cairo 渲染 SVG 文件的库。
- libspng - 更简单的 PNG 文件读写接口。
- libvips - 图像处理库。
- libxmi - 用于光栅化 2D 矢量图形的函数库。
- little CMS - 色彩管理系统。提供 ICC 配置文件之间的快速转换。
- OpenGL - 高性能图形的行业标准,带有原生 C 绑定。[多种许可证][148]。
- SAIL - ⛵ 为人类(而非机器)设计的缺失的小而快的图像解码库
字符串处理
- SDS - 简单动态字符串;一种以更简单方式处理字符串的库,但与普通 C 字符串函数兼容。可通过 [clib][26] 获取。
- StringZilla - 速度提升高达 10 倍的 SIMD 和 SWAR 加速字符串搜索、排序、哈希、编辑距离、对齐和生成器。
- utf8.h - 单头文件 UTF-8 库,旨在模仿 C 风格字符串函数。公有领域。
- utf8proc - 用于处理 UTF-8 数据的库。
- str - 又一个 C 语言字符串库。
- librope - UTF-8 rope('重型'字符串)库。
- levenstein.c - [Levenstein 距离][334]算法实现。[
MIT][MIT]。 - stmr.c - [Porter Stemmer][367]算法实现。
- bstring - 更好的字符串库。
- ICU - Unicode 国际组件;一个支持 Unicode 的库。
- libunistring - 用于操作 Unicode 字符串的库。
- libgiconv - 文本转换库。
框架
提供数据结构及其他预期功能的大型库
- TBOX - 具有大量功能的多平台库。
- sc - C 语言的常用库和数据结构。
- pspsdk - 用于 PSP 自制软件开发的开源 SDK。[多种许可证][621]。
- plibsys - 跨平台系统 C 库。零第三方依赖,仅使用原生系统调用。
- libnih - 轻量级函数和结构库。
- APR - Apache 可移植运行时;另一个跨平台实用函数库。
- C Algorithms - 常用算法和数据结构的集合。
- CPL - 通用管道库;一组旨在提供全面、高效且健壮软件工具包的库。
- EFL - 大量有用的数据结构和函数。多种许可证,均为开源。
- GLib - 实用函数和结构库,设计为可移植、高效且强大。
- klib - 常用算法和数据结构的轻量实现。
- libcork - 为资源受限系统设计的实用函数和结构。可嵌入。
- libU - 小型基础工具库,包括内存分配、字符串操作和日志记录。
- PBL - 大型工具库,包含数据结构等功能。
- qlibc - 简单而强大的库,旨在替代 GLib,同时注重小巧轻量。
加密
大多是知名加密算法的库实现,或
- s2n - TLS/SSL 协议的 C99 实现,设计简单、快速且以安全为优先。
- MIRACL - 多精度整数与有理数算术加密库;椭圆曲线密码学 SDK。
- trezor-crypto - 针对嵌入式设备高度优化的加密算法。
- bfish - 单头文件 ANSI-C Blowfish ECB 加密库。公有领域。
- GNU SASL - 简单认证与安全层及几种常见 SASL 机制的实现。
- GnuTLS - 安全通信库,实现 SSL、TLS 和 DTLS。
- libgcrypt - 通用密码学库,提供多种可用密码。
- OpenSSL - SSL 和 TLS 协议的实现。同时包含密码学库。[双重许可:OpenSSL 许可证和 SSLeay 许可证][111]。
- liboqs - 抗量子加密算法库。
- libsodium - 现代且易用的加密库。
- libtomcrypt - 相当全面、模块化且可移植的加密工具包。公有领域。
- mbed TLS - 另一种加密实现。
- retter - 与密码学和安全相关的哈希函数、密码、工具、库和材料的集合。公共领域。
- sphlib - 多种哈希函数的实现集合,包括若干加密哈希函数。
词法分析与语法分析
专门用于词法分析(或词法扫描)和语法分析的库。
多媒体
- aubio - 用于音频和音乐分析的库。
- minimp3 - 轻量级 MP3 解码器单头文件库。
- FFMPEG - 完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。
- GStreamer - 音频和视觉媒体框架。
- libmpv - 音乐播放库。
- libsndfile - 用于读写声音文件的库。支持多种格式。[
LGPL-2.1-only][LGPL-2.1-only] 或 - libsoundio - 用于跨平台、实时音频输入输出的库。具有多种后端。
- libVLC - 完整的音视频编码、解码、播放和流式传输多媒体库。
- lodepng - 简单的 PNG 图像解码器和编码器,无需其他依赖。
- Soundpipe - 轻量级音乐 DSP 库。
并发与并行
- Libaco - 一个极速且轻量的 C 非对称协程库。
- Open MPI - 消息传递接口实现。
- libcsp - 受 CSP 模型影响的高性能并发 C 库。
- libhl - 实现线程安全 API 以管理一系列数据结构的库。同时提供一些用于并发和无锁编程的辅助函数与结构。
- libconcurrent - 使用协程的 C11 并发编程库。
- pal - 面向数学、并行处理和数据移动的优化库。
- checkedthreads - 用于并行化的简单库,内置竞态条件检查。
- oclkit - 双文件 OpenCL 封装。
- cchan - 用于线程间通信的通道构造小型库。公有领域。
- ck - 并发原语、安全内存回收机制及无锁数据结构。
- FCFS RWLock - POSIX 线程的先到先服务读写锁。
- libdill - 使结构化并发编程变得简单的库。
- liburcu - 数据同步库,其扩展性与核心数量呈线性关系。
- mill - Go 风格并发。
- OCL-MLA - OpenCL 中级抽象。
- OpenMP - 一组 pragma,旨在简化代码并行化。标准(不适用许可)。
- pth - 用于多线程执行的非抢占式优先级调度的可移植实现。
- pthreads - POSIX 线程库。标准(无适用许可证)。
- TinyCThread - C11 线程 API 的可移植、小型实现。
JSON
- json-c - 在 C 中轻松处理 JSON。附带引用计数对象模型,旨在符合 [RFC 7159][11]。
- parson - 双文件、C89 兼容的 JSON 解析器。
- json.h - 单文件非流式 JSON 解析器。
- WJElement - 高级 JSON 操作库,支持 JSON Schema。[
LGPL-2.0-or-later][LGPL-2.0-or-later] 或 [LGPL-2.1-or-later][LGPL-2.1-or-later] 或 - jfes - 面向嵌入式系统的 JSON;无任何依赖的简单 JSON 引擎。
- json - 简单、低内存占用的 JSON 解析器。
- Jansson - 用于编码、解码和操作 JSON 的库。
- jsmn - 极简 JSON 解析器。
- YAJL - 快速流式 JSON 解析库。
INI
- inih - 小巧简单的 INI 文件解析器,适用于嵌入式系统。
- iniparser - 解析 .ini 文件的解析器。
- minIni - 小巧且可移植的 INI 解析器。
- libconfini - 又一个 INI 解析器。
数据结构
- Collections-C - 通用数据结构库。
- M*LIB - 通用但类型安全的 C 容器库,仅头文件实现。
- C-Macro-Collections - 使用宏生成简单且通用的数据结构。
- kdtree - 用于处理 KD 树的简单库。
- PackedArray - 任意位宽紧密打包的无符号整数的随机访问数组,具有 SIMD 优化实现。
- offbrand - 通用、引用计数的数据结构集合。
- CLIST - 简单轻量的[动态数组][25]实现。
- ds - 常见数据结构与算法。
- vector.h - 类型化列表的头文件库。
- list.h - 单链表和双链表函数的实现。
- igraph - 图处理库。
- libavl - 包含一系列自平衡二叉树的库。
- libcdada - 一个小型、可移植、无宏的 C 语言基础数据结构库(列表、集合、映射、队列等),后端为 C++。
- liblfds - 可移植的无锁数据结构库。公有领域(更确切地说,任意许可证均可)。
- libsrt - 软实时和硬实时数据结构。[
BSD-3-Clause][BSD-3-Clause]。 - rb3ptr - 红黑树。暴露了几乎所有实现原语,因此可用于增强、多个兼容排序函数等场景。
- uthash - 单文件哈希表实现。
AI
计算机视觉、神经网络、机器学习以及其他类似领域。
序列化
- protobuf-c - Google Protocol Buffer 的实现。
- flatcc - [FlatBuffers][145] 编译器和库。
- mpack - [MessagePack][379] 序列化协议的另一种实现。
- binn - 二进制序列化格式,旨在紧凑、快速且易于使用。
- tpl - 小型二进制序列化库。
- cmp - [MessagePack][379] 序列化协议的实现。
- pbtools - Google Protocol Buffers C 源码生成器。
- c-capnproto - Cap'n Proto 序列化协议的实现。
- libavro - Avro 数据序列化系统的实现。
- OPIC - C 中的对象持久化;一种革命性的序列化框架,具有匹配的磁盘和内存表示。
- xdr - 外部数据表示;一种数据序列化标准。标准(无适用许可证)。
正则表达式
内存管理
无论是不同的、更快的 malloc 还是彻底的垃圾回收,任何方案均可。
编译器
编译器,以及与编译器和编译相关的工具。
可嵌入的脚本引擎
当 C 语言不是合适的解决方案,或需要更动态的配置引擎时:
其他
哈希
用于非加密目的的哈希函数实现。加密哈希
- HighwayHash - 快速、强健、使用 SIMD 的哈希函数。也包含 SipHash 的实现(但较慢)。
- t1ha - Fast Positive Hash——一个可移植、快速的哈希函数。
- CLHash - 实现极快的 CLHash 哈希函数的库。仅适用于 Intel Haswell 或更新版本。
- SpookyHash - 极快的哈希函数。
- xxHash - 极快的哈希算法,提供 32 位和 64 位版本。
测试
- greatest - 单文件单元测试库,无内存分配。
- theft - 基于属性的测试(类似于 [Quickcheck][301])。
- Owi - 基于符号执行的缺陷查找工具([论文][708])
- ctest - 又一个单元测试框架。
- clar - 清晰简单的单元测试框架。
- Tau - 面向 C/C++ 的微型单元测试框架(约 1 千行代码)。包含丰富的断言宏,支持自动测试
- CHEAT - 简单的单元测试框架。
- Nala - 面向 C 项目的测试框架。
- minctest - 单元测试微库。
- utest - 单头文件单元测试库。
- Rexo - 面向 C89/C++ 的框架,支持自动注册测试并提供精良的 API。
- Check - 单元测试框架。
- ciut - 现代极简、无麻烦的单元测试框架。
- CMock - 模拟/桩生成器。
- cmocka - 支持模拟对象的单元测试框架。
- Criterion - KISS、非侵入式测试框架。
- CUnit - 另一个单元测试框架。
- munit - 小型单元测试框架。
- Unity - 简单的单元测试框架。
数值
- clBLAS - 用 OpenCL 编写的 BLAS 函数。
- SCS - Splitting Conic Solver;用于求解大规模凸锥问题的数值优化包。
- Arb - 用于任意精度区间算术的库。
- fft-c - 来自 netlib 的 fftpack 的高性能傅里叶变换;以用户友好的格式封装。
- apophenia - 用于统计和科学计算的库。
- ATLAS - 自动调优线性代数软件。
- cmathl - 数学库,包含大量数学函数,支持 CMake 构建。力求接近 C89/C90 标准以保证可移植性。
- Cuba - 用于多维数值积分的库。
- FFTW - 西方最快的傅里叶变换;高度优化的快速傅里叶变换例程。
- FLINT - 数论快速库;支持数字、多项式、幂级数和矩阵等算术的库。
- GLPK - GNU 线性规划工具包;一个用于求解大规模线性规划、混合整数规划及其他相关问题的软件包。
- GMP - GNU 多精度算术库;用于任意精度算术的库。[
GPL-2.0-only][GPL-2.0-only] 或 - GNU MPC - 复数算术库。
- GNU MPFR - 任意精度浮点算术库。
- GNU MPRIA - 用于多精度有理数区间算术的可移植数学库。
- GSL - GNU 科学库;一个高级数值库。[
GPL-3.0-only][GPL-3.0-only]。 - KISS FFT - 简单快速傅里叶变换库。
- LAPACKE - [LAPACK][134] 的接口。
- LibTomMath - 可移植的数论多精度整数库。支持代数、数字操作、模归约及各种数论例程。公有领域。
- LibTomPoly - 多项式相关数学库。公有领域。
- PARI/GP - 数论计算机代数系统;包含一个到 C 的编译器。
- PETSc - 用于偏微分方程建模的科学应用的可扩展并行求解的数据结构和例程套件。
- SLEPc - 用于在并行计算机上求解大型稀疏特征值问题的库。
- TomsFastMath - 一组优化的数学运算(汇编实现),适用于密码学用途。公有领域。
- Yeppp! - 快速、SIMD 优化的数学库。
Web 框架
构建下一代卓越 Web 的综合集成解决方案。
标准库
(标准规定的)C 标准库的实现。
在线参考资源
- tinyc.game - 可以立即编译运行的小型 C 游戏 http://tinyc.games
- Benchmarks of the Lockless Memory Allocator
- C FAQ - comp.lang.c Frequently Asked Questions
- Comparison of C/POSIX standard library implementations for Linux
- Draft C89 standard
- Draft C99 standard
- Draft C11 standard
- Finding the best 64-bit simulation PRNG
- SEI CERT C Coding Standard
调试
因为我们都偶尔需要调试。各种调试工具。
- Owi - 符号执行工具([论文][708])。
- debug - 单头文件库,便于“printf 调试”。
- vfs-pipe - 单头文件库,将内部 C 变量暴露为虚拟文件系统,用于实时检查和调优。
- C-Reduce - 工具,接受一个具有感兴趣属性的大型 C 文件,并自动生成一个具有相同属性的更小的 C 文件。旨在帮助在复杂代码中创建最小化 bug 演示案例。
- CBMC - C 有界模型检查器;用于验证数组边界、指针安全和用户指定断言的工具。
- cflow - 分析一组源文件并打印程序控制流图。
- Complexity - 用于衡量源代码复杂度的工具。
- CScout - C 程序的源代码分析器和重构浏览器。
- DDD - 一系列命令行调试器的图形前端。
- ESBMC - 基于 SMT 的高效有界模型检查器;用于验证单线程和多线程程序、用户断言、溢出以及指针/内存安全。
- GDB - GNU 项目调试器。
- lldb - LLVM 调试器。
- rr - 记录非确定性执行以实现确定性调试的调试器。
- Valgrind - 一系列动态分析工具,包括泄漏检查器。
构建系统
自动化 C 项目构建和测试的工具。
- zproject - 项目生成器和构建系统支持工具。
- flint - 零配置、清单优先的 C/C++ 构建系统和包管理器,支持直接解析 Git 依赖。
- Autotools project skeleton - 一个简单的 autotools 骨架(模板),用于快速启动新项目。
- Autotools - 也称为 GNU 构建系统(automake、autoconf、libtool 等),是最广泛使用的构建系统之一(configure && make)。
- CMake - 跨平台工具系列,用于构建、打包和测试软件。
- GNU Make - 控制程序可执行文件和其他非源文件生成的工具。
- Meson - 基于 Ninja 的极快、用户友好的构建系统。
- Premake - 命令行工具,读取软件项目的脚本化定义,并生成Visual Studio和GNU Make的项目文件。其他目标平台也在开发中。
- SCons - 使用 Python 的软件构建工具。
- xmake - 跨平台构建工具。
初学者在线资源
- How to program a text adventure in C
- A tutorial on pointers
- A tutorial on portable Makefiles
- Building C Projects
- C Programming Wikibook
- Introduction to `fun' C
- Learning C with GDB
- memcpy vs memmove
- POSIX Threads Programming tutorial - (有点过时,但大部分仍然有效有用)
- The GNU C Programming Tutorial - (在线 PDF)
- Templating in C
- What a C programmer should know about memory
- CodeforWin: Learn C Programming, Data Structures Tutorials and Exercises online
- Learn C: Free and Open-Source Interactive C Tutorial
文档生成
编辑器
更高级的 IDE 型编辑器。如果你想要程序员文本编辑器,请看
- Anjuta DevStudio - GNOME IDE。
- Code::Blocks - 可扩展、可配置、支持 C 的 IDE。
- CodeLite - 跨平台 IDE。
- Geany - 小巧且快速的 IDE。
- KDevelop - KDE IDE。
- zinjaI - 简单、轻量且功能丰富的 IDE。
中级在线资源
- 8 gdb tricks you should know
- 10 C99 tricks
- A comprehensive MPI tutorial resource
- Build Your Own Text Editor
- Diving into concurrency: trying out mutexes and atomics
- Generic C reference counting
- How to write portable C without complicating your build
- Introduction to OpenMP - (视频)
- OpenMP tutorial - (针对 OpenMP3 标准)
- MPI tutorial
- Scalable C - Writing Large-Scale Distributed C
- Some unknown features or tricks in C language
- What every C programmer should know about undefined behaviour
高级在线资源
- Advanced metaprogramming in C
- A quick tutorial on implementing and debugging malloc, free, calloc, and realloc
- Bit twiddling hacks
- Implementing smart pointers for the C programming language
- Inline functions in C
- Metaprogramming custom control structures in C
- Solving the temporary storage problem of C macros
- Some dark corners of C
- Writing efficient C and C code optimization
- Compiling Algebraic Data Types in Pure C99
参考书籍
- C: A Reference Manual 5E - C99 完整参考书。
- C in a Nutshell 2E - C11 简明参考书。
- C Pocket Reference - C99 简明参考书。
- The C Programming Language 2E - C 语言创始人所著的原始书籍。
入门书籍
- C Primer Plus 6E - C11 编程完整教程。
- C Programming: A Modern Approach - 学习 C 语言基础的优秀书籍。
- Head First C - 'Head-first' 风格的 C 语言学习书籍。
中级书籍
- 21st Century C - 优秀的 C 语言第二本编程书。
- Understanding and Using C Pointers - 深入讲解 C 语言指针的资源。
- ZeroMQ - 使用 ZeroMQ 与 C 语言结合的书籍。
高级书籍
- Expert C Programming: Deep C Secrets - 深入、有趣且富有见地地剖析了 C 语言的内部机制。
- Modern C, Third Edition: Covers the C23 standard - 在《现代 C 语言(第三版)》中,你将学会利用最新工具和技术充分发挥 C 语言的潜力。