精选高质量 C 单头文件库推荐引言1、STB系列库2、GLM (OpenGL Mathematics)3、Dear ImGui4、TinyOBJLoader5、sokol系列库6、json.hpp7、doctest8、concurrentqueue9、CLI1110、cpp-httplib11、TinyXML212、magic_enum13、date.h14、portable-file-dialogs15、termcolor16、、exprtk17、sol218、EnTT引言单头文件库Single-Header Library顾名思义就是把库的所有功能包括声明和实现都封装在一个独立的.h或.hpp文件内。最大化简化库的集成过程简单的#include指令即可把强大的功能引入到自己的项目中。单头文件库之所以能在C社区占据一席之地是因为提供了一种跟传统库截然不同的、更为便捷的体验。单头文件库最显著的优势极简的集成方式。只要把.h或.hpp文件复制到项目源代码目录或包含路径然后在.cpp文件用#include导入即可。所有代码都包含在一个文件内并且避免对特定平台API或复杂系统库的硬性依赖单头文件库有着非常高的可移植性。大型C项目管理众多第三方依赖及其版本冲突是非常头疼的问题被称为“依赖地狱”。单头文件库的自包含特性没有外部依赖或只有极少的标准库依赖简化项目的依赖图谱。很多高质量的单头文件库在设计上就秉持着轻量化和高性能的原则。用模板元编程、内联函数等技术力求在编译时完成尽可能多的工作减少运行时开销。所有代码都集中在一个文件内单头文件库有着非常高的透明度。介绍几个我知道的单头文件库吧1、STB系列库这是一个系列库每个文件都是一个特定任务代码质量高性能好主要用在游戏和图形领域。stb_image.h: 加载各种图片格式PNG, JPG, BMP, TGA, GIF, PSD, HDR, PIC非常流行。stb_image_write.h: 写入各种图片格式PNG, JPG, BMP, TGA跟stb_image配套使用。stb_truetype.h: 从 TrueType 字体文件渲染字符用于文本显示。stb_vorbis.h: Ogg Vorbis 音频解码器。stb_perlin.h: 生成 Perlin 噪声用的比较多的是程序化纹理和地形。…项目地址https://github.com/nothings/stb2、GLM (OpenGL Mathematics)一个纯头文件的数学库专门为图形编程设计提供矩阵变换、四元数、数据打包、随机数、噪声等数学类型和函数跟 GLSL 语法高度兼容。不过不是严格意义上的“一个文件”但所有功能都在头文件实现只要包含相应的头文件就可以。要克隆整个仓库或下载 ZIP 包然后把glm/目录添加到包含路径。项目地址https://github.com/g-truc/glm3、Dear ImGui一个快速、轻量级的立即模式 GUI 库主要是游戏、引擎、工具的调试和开发内嵌 UI。很容易集成渲染后端可自定义非常灵活。项目地址https://github.com/ocornut/imgui4、TinyOBJLoader简单易用的 OBJ 模型文件加载器。非常快速内存占用低很适合快速集成。主要的单头文件是tiny_obj_loader.h。项目地址https://github.com/tinyobjloader/tinyobjloader5、sokol系列库也是一个系列库小型、跨平台的 C/C 语言库用做图形、应用生命周期、音频、GL实用工具等。核心库sokol_gfx.h3D-API 包装器GL/GLES3/WebGL2 Metal D3D11 WebGPUsokol_app.h应用框架包装器条目 窗口 3D 上下文 输入sokol_time.h时间测量sokol_audio.h最小缓冲区流音频播放sokol_fetch.h来自 HTTP 和本地文件系统的异步数据流sokol_args.h用于 Web 和本机应用的统一 cmdline/URL 参数分析器sokol_log.h为其他 Sokol 标头提供标准日志记录回调实用程序库sokol_imgui.hDear ImGui 的 sokol_gfx.h 渲染后端sokol_nuklear.hNuklear 的 sokol_gfx.h 渲染后端sokol_gl.h基于 sokol_gfx.h 的 OpenGL 1.x 风格即时模式渲染 APIsokol_fontstash.hfontstash 的 sokol_gl.h 渲染后端sokol_gfx_imgui.hsokol_gfx.h 的调试检查 UI使用 Dear ImGui 实现sokol_debugtext.h使用老式家用电脑字体的简单文本渲染器sokol_memtrack.h轻松跟踪 Sokol 标头中的内存分配sokol_shape.h生成简单的形状并将它们插入 sokol-gfx 资源创建结构体中sokol_color.h用于创建sg_color对象的 X11 样式颜色常量和函数sokol_spine.h围绕 Spine C 运行时的 sokol 风格包装器。每个库都非常小巧很容易集成适合小型项目或嵌入式开发。项目地址https://github.com/floooh/sokol6、json.hpp现代 C 的 JSON 库用直观的 API 来解析、生成和操作 JSON 数据。语法优雅使用 C11/14/17 特性非常易用功能强大。核心文件是single_include/nlohmann/json.hpp包含了所有依赖。项目地址https://github.com/nlohmann/json7、doctest一个轻量级、功能丰富的单元测试框架。只有一个单头文件编译速度快容易集成支持多种测试模式。核心文件是doctest/doctest.h。项目地址https://github.com/doctest/doctest8、concurrentqueue一个高性能、无锁的并发队列。针对多线程环境优化性能非常棒适合做高并发场景。核心文件是concurrentqueue.h。项目地址https://github.com/cameron314/concurrentqueue9、CLI11一个强大、易用的命令行解析器。支持子命令、选项、标志等代码简洁功能丰富。核心文件是CLI/CLI.hpp。项目地址: https://github.com/CLIUtils/CLI1110、cpp-httplib一个现代 C HTTP/HTTPS 客户端和服务器库。纯 C11 单头文件实现很容易使用支持 WebSocket。核心文件是httplib.h。项目地址https://github.com/yhirose/cpp-httplib11、TinyXML2一个轻量级、快速的 C XML 解析器。内存占用很低API 简洁适合做嵌入式系统或对性能有要求的场景。核心文件是tinyxml2.h和tinyxml2.cpp。虽然有一个.cpp文件但不影响它是一个简易库只要把这两个文件添加到项目就可以。项目地址: https://github.com/leethomason/tinyxml212、magic_enumC11/14/17/20 的编译时枚举反射库。可以在编译时将枚举值转换为字符串或把字符串转换为枚举值非常方便。核心文件是include/magic_enum.hpp。项目地址https://github.com/Neargye/magic_enum13、date.h一个现代 C 日期和时间库是 C20std::chrono扩展的前身。功能强大API 设计良好解决 C 标准库的日期时间处理的不足。核心文件是include/date/date.h。如果要特定功能还要包含其他头文件。项目地址: https://github.com/HowardHinnant/date14、portable-file-dialogs跨平台的文件选择、保存、消息框等对话框。封装了不同操作系统的原生对话框提供统一的 C 接口。核心文件是portable-file-dialogs.h。项目地址: https://github.com/samhocevar/portable-file-dialogs15、termcolor用来在终端输出彩色文本。 简单易用通过 ANSI 转义码实现跨平台。核心文件是include/termcolor/termcolor.hpp。项目地址https://github.com/ikalnytskyi/termcolor16、、exprtk一个运行时数学表达式解析和求值库。性能极高支持复杂的数学函数、变量和用户自定义函数。核心文件是exprtk.hpp。项目地址: https://github.com/ArashPartow/exprtk17、sol2C 到 Lua 的绑定库。也是很容易使用功能全面支持多种 C 类型和 Lua 类型之间的转换。核心文件是sol/sol.hpp。项目地址: https://github.com/ThePhD/sol218、EnTT一个现代 C 实体组件系统 (ECS) 库用来做游戏开发。有非常强的运行时多态和反射能力。核心文件是src/entt/entt.hpp。项目地址: https://github.com/skypjack/entt