为什么标准C库中没有哈希表支持?有什么具体原因吗?

推荐答案

标准C库中没有哈希表,因为:

  • 没有人向工作小组提交建议书;或
  • 工作组认为没有必要.

这就是ISO的工作方式.提案被提出并被接受或拒绝.

您必须小心添加到标准库中的内容,因为您有两个相互冲突的组.作为一名user,人,您可能希望将sun下的所有数据结构都添加到该标准中,以使该语言更加有用.

但是,作为语言implementor(顺便说一句,这些人可能是各种工作组中的大多数人,因此他们的观点可能会产生更大的影响),你真的不想为实现可能不是每个人都使用的东西而烦恼.C89出现时的所有内容都与一个事实有关,即主要目的是编纂现有实践,而不是引入新实践.从那时起,标准的所有迭代在它们可以做的事情上都有一点自由,但向后兼容性仍然是一个重要的问题.

我自己也有矛盾.当然,我希望在C.可以处理java、C++或Python库的所有特性,这会让我们很难为新来的人学习所有的东西,正如一个评论家所说的,可能使任何代码猴子都能输出有用的代码,降低我在这个过程中的价值:

从我漫长且(大部分)辉煌的职业生涯中,我几乎拥有了我所需要的所有数据结构.对于这类内容,您不局限于标准库.你可以使用很多第三方工具来完成这项工作,而且(像我一样)你也可以使用自己的工具.

如果您想知道为什么在每次迭代中都会做出某些决策,ISO(和最初的ANSI,在ISO接管之前)通常会发布基本文档.美国国家标准协会(ANSI)的C89 One可以找到here.它在范围内包含了这样一个小美:

这一基本原理主要侧重于基础文件中描述的对语言的添加、澄清和更改.这并不是C语言作为一个整体的理由:委员会负责编纂一种现有的语言,而不是设计一种新的语言.在这一理论基础中,没有人试图捍卫该语言已有的语法,例如声明的语法或运算符的绑定.

我特别喜欢承认,他们对任何可能早于他们try 标准化之前的邪恶混乱不负有责任.

但是,也许你的问题的真正答案在于这一点,即指导原则之一:


Keep the spirit of C.委员会的一个主要目标是保持C语言的传统精神.C语言的精神有很多方面,但其本质是对C语言所基于的基本原则的社区情感.C语言精神的一些方面可以概括为:

  • 相信程序员.
  • 不要阻止程序员做需要做的事情.
  • 保持语言的简洁性和简洁性.
  • 只提供一种执行操作的方法.
  • 即使不能保证它的便携性,也要让它快一点.

第三个原因可能是库在最初的标准化工作中没有大规模扩展的主要原因--这一点,以及这样一个事实,即委员会的这种扩展可能会导致ANSI C被贴上C2038而不是C89的标签.

C++相关问答推荐

如何在 c 中访问没有“->”的属性?

将C中的2D char数组写入/读取到二进制文件

C 和 Rust 代码片段之间的不同行为

判断数组是否存在于一组数组中

我可以在同一个文件中使用 time.h 中的两个 tm 结构吗?

使用 printf() 输出正确的小数位数?

SIMD - 如何从不同元素宽度的 2 个向量中添加相应的值(char 或 uint8_t 添加到 int)

fork() - 多次调用子代码(相同的 PID)

从数组伪排序

可能的堆栈粉碎?

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

我们可以使用变量根据需要给出数组中元素的数量吗?

DirectX11 与多视频适配器 (GPU) PC

为什么 long long 2147483647 + 1 = -2147483648?

为什么我应该总是启用编译器警告?

为什么glibc的strlen需要这么复杂才能快速运行?

为什么我在使用 rand() 时会得到这种特殊的 colored颜色 模式?

“保留用于任何用途”是什么意思?

使用无符号而不是有符号的 int 是否更有可能导致错误?为什么?

将双精度数分配给 C 中的 int 变量的非直观结果