需要一个通用的库,纯C

时间:2009-05-20 20:28:35

标签: c data-structures

你能为C推荐一个好的通用数据容器库(纯C,而不是C ++)吗? 我只需要基本结构,如动态数组,哈希表等。

(注意:“好”我指的是快速+优雅的界面)。

9 个答案:

答案 0 :(得分:15)

Glib不足以满足您的需求吗? :-) developer.gnome.org/glib

答案 1 :(得分:14)

我认为Dave Hanson的C Interfaces and Implementations既快又优雅。它包括许多不同类型的容器,一些字符串处理,多精度算法,异常,几个不同的内存管理器。好东西。

有一本书,但您不需要购买它来使用该软件。

答案 2 :(得分:14)

Apache Portable Runtime

http://apr.apache.org/

包括这些领域的模块。

  • 平台定义
  • 内部记忆分配
  • 原子操作
  • 动态对象处理
  • 操纵环境的功能
  • 错误代码
  • 文件信息
  • 文件I / O处理函数
  • 文件名匹配功能
  • 杂项库例程
  • 命令参数解析
  • Global Locking Routines
  • 哈希表
  • 通用图书馆例程
  • MMAP(记忆图)例程
  • 网络例程
  • 民意调查
  • 内存池功能
  • 可移植性例程
  • 流程锁定例程
  • 随机函数
  • 响铃宏实施
  • 共享内存例程
  • 信号处理
  • 字符串例程
  • 内部APR支持功能
  • 表格和数组函数
  • 条件变量例程
  • Thread Mutex Routines
  • 线程和处理函数
  • 读者/作家锁定例程
  • 时间例程
  • 用户和组ID服务

答案 3 :(得分:7)

我之前建议MemSL,但网站和公司似乎已经灭绝。我现在建议glib,它涵盖了大部分相同的功能,并得到了整个Linux社区的广泛支持和使用。

我在实现x86内核时使用了MemSL,我发现它是通用的,可靠的,没有bug。

从描述中: C内存结构库概述(MemSL)

Memory Structures Library,简称MemSL,是一个有用的例程库,允许在C中有效使用复杂的数据结构.MessSL包含用于管理的例程:

  • 多维动态分配阵列
  • 单个链接列表
  • 双重链接列表
  • 循环链接列表
  • 剪切,复制和粘贴链接列表
  • 链接列表的多个位置指针
  • 队列
  • 从队列
  • 字典
  • 具有单独链接的哈希表
  • 使用用户定义的分页的哈希表
  • 使用动态分页的哈希表
  • 二进制搜索树
  • 螺纹二进制搜索树
  • AVL平衡二进制搜索树
  • AVL平衡线程二进制搜索树
  • 优先级堆
  • 完全动态优先搜索队列

答案 4 :(得分:5)

您可能还想查看iMatix SFL,引用他们的网页:

  

iMatix的SFL(标准功能库)是一种便携式功能   用于C / C ++程序的库。 SFL是多年发展的结果,   并作为开源软件提供,以利于   互联网社区。   SFL是用ANSI C编写的,并已移植到MS-DOS,Windows,OS / 2,Linux   和其他UNIX系统(IBM AIX,SunOS,HP / UX,Solaris,NetBSD,FreeBSD,   SCO OpenServer,>数字UNIX)和数字OpenVMS。它配备了完整的资源和   HTML中的文档。

     

SFL提供了大约450个涵盖这些领域的功能:

     
      
  • 压缩,加密和编码;
  •   
  • 数据类型转换和格式化;
  •   
  • 日期,时间和日历;
  •   
  • 目录和环境访问;
  •   
  • 用户和进程组;
  •   
  • 反转的位图索引;
  •   
  • 符号表;
  •   
  • 错误消息文件;
  •   
  • 配置文件;
  •   
  • 字符串操作和搜索;
  •   
  • 文件访问;
  •   
  • 互联网套接字访问;
  •   
  • 互联网编程(MIME,CGI);
  •   
  • SMTP(电子邮件)访问;
  •   
  • 服务器(批处理)编程;
  •   
  • 节目追踪。
  •   
     

SFL是您可以使用和分发用于私人或商业的免费软件   根据{{​​3}}的目的。

有关API本身的更多详细信息,请参阅SFL License Agreement

答案 5 :(得分:5)

答案 6 :(得分:4)

Sglib“是C的通用库,受C ++标准模板库的启发”

答案 7 :(得分:2)

让我补充一下:

http://libslack.org

(...并添加到:libcx)

答案 8 :(得分:2)

您可能有兴趣查看qLibc。

http://en.wikipedia.org/wiki/Qlibc http://www.qdecoder.org/qlibc/

它是一个通用的完整C / C ++库,包含各种容器和通用库例程。