【问题标题】:Why not all the standard headers are preceded with std prefix?为什么不是所有标准头文件都以 std 前缀开头?
【发布时间】:2021-02-25 17:16:29
【问题描述】:

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

【问题讨论】:

  • 因为没有人说他们必须 ????‍♂️
  • 出于历史原因。第一个 C 编译器是在 1970 年代,当时还没有标准。
  • 考虑内存成本 1 美元/字节,大约在 1970 年开创了简洁名称的先例。
  • 标准头名称需要符合标准(6.10.2/5)中的限制,stdcomplex.h太长了。
  • @IanAbbott: 6.10.2 5 不对标头名称施加限制。它允许 C 实现不根据 . 之前的第八个字符以外的字符(或具有其他指示或以数字开头的字符)来区分标题名称。只要标题名称的前八个字符可以区分,就可以了。标准库包含长度超过 8 个字符的标头名称,stdatomic.hstdnoreturn.h

标签: c language-lawyer naming c11 c17


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    最早提到标准库似乎是 K&R C 编程语言 1978 年的第 1 版,我们可以在下面的第 8.5 章中阅读:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2012-03-09
      • 2021-10-12
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多