4

为什么不是所有的标准标题都以std前缀开头?即为什么complex.h而不是stdcomplex.h

4

2 回答 2

6

为什么?为什么不?谁知道?构成标准库的头文件在标准存在之前就开始演变为该类别,经过开发人员多年的修订和 C 委员会成员的审查。许多开发和规范化这些文件的原始作者和委员会成员现在是天空中大型编译器的一部分,无法回答“为什么”标准命名约定不是真正的传统或标准的问题。但是阅读这个关于这个主题的 wiki 页面至少可以让你了解一些历史和背景。

于 2021-02-25T17:38:41.447 回答
2

命名在历史上与正式的 ISO 标准化无关,我认为从来没有野心std在所有标准库面前折腾。

最早提到标准库似乎是 K&R The C Programming Language 1st edition from 1978,我们可以在下面的第 8.5 章中阅读:

描述文件的数据结构包含在 filestdio.h中,必须包含(by #include)在任何使用标准库中的例程的源文件中。

值得注意的是,K&R 将其称为标准库,而不是标准输入/输出库。所以也许(这是推测)这个头文件最初打算成为 C 的整个标准库。这是我在书中可以找到的唯一一个当前 ISO 标准库头文件,它早于正式标准化超过十年。

后来在 ANSI/ISO 标准化期间,标头、stdarg和被添加到第一个标准中,但这些只是 15 个使用 std 前缀的标准标头中的 4 个。各种 C 或 Unix 事实标准头文件几乎任意添加到标准中。任何事情都没有合理的理由,尤其是 API 或命名。他们只是在标准中加入了各种已经存在的“好有”的 Unix 库。stddefstdiostdlib

值得注意的是,最初的 C 标准只保证标准标题有 6 个唯一字母,并且所有原始标题的名称都包含 6 个或更少的字母。这在 C99 中扩展为 8 个字母。

C99 延续了任意命名的传统,添加了一大堆新的头文件,其中只有stdintstdbool具有 std 前缀。C11 将大多数新标头命名为 std 前缀可能是受 C++ 的影响,但值得注意的是 C11 也添加了uchar.h不带前缀的标头。

于 2021-02-26T10:07:09.997 回答