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

推荐答案

标准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的标签.

C++相关问答推荐

为什么静态说明符为内联函数生成外部定义?

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

如何判断宏参数是否为C语言中的整型文字

在C中使用动态内存分配找到最小的负数

有没有更简单的方法从用户那里获取数据类型来计算结果

编译的时候g++通常会比GCC慢很多吗?

如何一次获取一个字符

为什么在此程序中必须使用Volatile关键字?

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

C整型和_泛型.哪些类型是兼容的?

如何在双向表中实现线程安全,每个条目仅使用4位,同时避免任何全局锁?

链接器脚本和C程序使用相同的头文件,这可能吗?

C语言中奇怪的输出打印数组

我可以创建适用于不同endian的 colored颜色 struct 吗?

c程序,让用户输入两类数字,并给出输出用户输入多少个数字

Ubuntu编译:C中的文件格式无法识别错误

令人困惑的返回和 scanf 问题相关

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

Linux memcpy 限制关键字语法

可以从指针数组中的值初始化指针吗?