标准C库中没有哈希表,因为:
这就是ISO的工作方式.提案被提出并被接受或拒绝.
您必须小心添加到标准库中的内容,因为您有两个相互冲突的组.作为一名user,人,您可能希望将sun下的所有数据 struct 都添加到该标准中,以使该语言更加有用.
但是,作为语言implementor(顺便说一句,这些人可能是各种工作组中的大多数人,因此他们的观点可能会产生更大的影响),你真的不想为实现可能不是每个人都使用的东西而烦恼.C89出现时的所有内容都与一个事实有关,即主要目的是编纂现有实践,而不是引入新实践.从那时起,标准的所有迭代在它们可以做的事情上都有一点自由,但向后兼容性仍然是一个重要的问题.
我自己也有矛盾.当然,我希望在C.可以处理java、C++或Python库的所有特性,这会让我们很难为新来的人学习所有的东西,正如一个 comments 家所说的,可能使任何代码猴子都能输出有用的代码,降低我在这个过程中的价值:
从我漫长且(大部分)辉煌的职业生涯中,我几乎拥有了我所需要的所有数据 struct .对于这类内容,您不局限于标准库.你可以使用很多第三方工具来完成这项工作,而且(像我一样)你也可以使用自己的工具.
如果您想知道为什么在每次迭代中都会做出某些决策,ISO(和最初的ANSI,在ISO接管之前)通常会发布基本文档.美国国家标准协会(ANSI)的C89 One可以找到here.它在范围内包含了这样一个小美:
这一基本原理主要侧重于基础文件中描述的对语言的添加、澄清和更改.这并不是C语言作为一个整体的理由:委员会负责编纂一种现有的语言,而不是设计一种新的语言.在这一理论基础中,没有人试图捍卫该语言已有的语法,例如声明的语法或运算符的绑定.
我特别喜欢承认,他们对任何可能早于他们try 标准化之前的邪恶混乱不负有责任.
但是,也许你的问题的真正答案在于这一点,即指导原则之一:
Keep the spirit of C.委员会的一个主要目标是保持C语言的传统精神.C语言的精神有很多方面,但其本质是对C语言所基于的基本原则的社区情感.C语言精神的一些方面可以概括为:
第三个原因可能是库在最初的标准化工作中没有大规模扩展的主要原因--这一点,以及这样一个事实,即委员会的这种扩展可能会导致ANSI C被贴上C2038而不是C89的标签.