c++ - 在哪里可以找到当前的 C 或 C++ 标准文档?

标签 c++ c standards c++-faq

这个问题的答案是community effort .编辑现有答案以改进这篇文章。它目前不接受新的答案或互动。








对于许多问题,答案似乎可以在“标准”中找到。然而,我们在哪里找到呢?最好是在线的。

谷歌搜索有时会感到徒劳,尤其是对于 C 标准,因为它们淹没在编程论坛上的大量讨论中。

首先,因为这些是我现在正在搜索的,所以哪里有好的在线资源:

  • C89
  • C99
  • C11
  • C++98
  • C++03
  • C++11
  • C++14
  • C++17
  • 最佳答案

    标准的 PDF 版本
    截至 2014 年 9 月 1 日,PDF 格式的 C 和 C++ 标准文档的最佳价格位置是:

  • C++20 – ISO/IEC 14882:2020:198 CHF (about $217 US) from iso.org
  • C++17 – ISO/IEC 14882:2017:$116 from ansi.org
  • C++14 – ISO/IEC 14882:2014:$90 NZD (about $60 US) from Standards New Zealand
  • C++11 – ISO/IEC 14882:2011:$60 from ansi.org $60 from Techstreet
  • C++03 – ISO 14882:2003:$30 from ansi.org $48 from SAI Global
  • C++98 – ISO/IEC 14882:1998:$90 NZD (about $60 US) from Standards New Zealand
  • C17/C18 – ISO/IEC 9899:2018:$185 from SAI Global/$116 from INCITS/ANSI/N2176 / c17_updated_proposed_fdis.pdf draft from November 2017 (链接已损坏,请参阅 Wayback Machine N2176)
  • C11 – ISO/IEC 9899:2011:$30 $60 from ansi.org/WG14 draft version N1570
  • C99 – ISO 9899:1999:$30 $60 from ansi.org/WG14 draft version N1256
  • C90 – AS 3955-1991:$141 from ansi.org $175 from Techstreet (澳大利亚版 C90,与 ISO 9899:1990 相同)
  • C90 – 9899:1990 Hardcopy available from SAI Global ($88 + shipping)

  • 在标准的新版本发布后不久,您通常无法直接从标准机构获得标准(任何标准)的旧版本。因此,很难从标准机构购买 C89、C90、C99、C++98、C++03 的标准。如果您需要标准的旧版本,请查看 Techstreet作为一种可能的来源。例如,它仍然可以提供 PDF 格式的加拿大版本 CAN/CSA-ISO/IEC 9899:1990 标准,但需要付费。
    标准的非 PDF 电子版本
  • C89 – ANSI 文本格式的草案版本:( https://web.archive.org/web/20161223125339/http://flash-gordon.me.uk/ansi.c.txt )
  • C89 – HTML 文档的草稿版本:( http://port70.net/~nsz/c/c89/c89-draft.html )
  • C90 TC1; ISO/IEC 9899 TCOR1,单页 HTML 文档:( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm )
  • C90 TC2; ISO/IEC 9899 TCOR2,单页 HTML 文档:( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm )

  • 标准的打印版本
    标准的打印拷贝可从国家标准机构和 ISO 获得。但都非常昂贵。
    如果您想要一份 C90 标准的硬拷贝,且价格远低于上述价格,您可以找到一份廉价的 Herb Schildt 二手拷贝。的书The Annotated ANSI StandardAmazon ,其中包含标准的实际文本(有用)和对标准的评论(不太有用 - 它包含几个危险和误导性的错误)。
    C99 和 C++03 标准可从 Wiley 和 BSI(英国标准协会)以书籍形式获得:
  • C++03 Standard在亚马逊
  • C99 Standard在亚马逊

  • 标准委员会草案版本(免费)
    future 标准的工作草案通常可从委员会网站获得:
  • C++ committee website
  • C committee website

  • 如果您想从当前或更早的 C/C++ 标准中获取草稿,可以在 Internet 上免费获得一些草稿:
    对于 C:
  • ANSI X3.159-198 (C89):
    我找不到 C89 的 PDF,但它与 C90 几乎相同。唯一的主要区别在于样板和部分编号,尽管有一些轻微的文本差异
  • ISO/IEC 9899:1990 (C90):
    (几乎与 ANSI X3.159-198 (C89) 相同,除了 frontmatter 和部分编号。第 6.5.7 节(以前的 3.5.7)中至少有一个文本差异,其中“列表”变为“大括号-enclosed list”。请注意,在本文档中可以看到 ANSI 和 ISO/IEC 标准之间的转换,该文档将其名称称为“ANSI/ISO: 9899/99”,尽管这不是后来制定的正确名称它的标准,正确的名称是“ISO/IEC 9899:1990”)
  • C90 的 TC1:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n423.pdf
  • WG14 website 上没有 TC2 的 PDF 链接,可悲。
  • ISO/IEC 9899:1999(C99 包含所有三个技术勘误表):
    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
  • 仅包含 TC1 和 TC2 的早期版本的 C99:
    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
  • 原始(即更正前)C99 的工作草案:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n843.htm (HTML) 和 http://www.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.pdf (PDF)。
    请注意,后来有两个工作草案:N869 和 N878,但它们似乎已从 WG14 网站上删除,因此这是可用的最新版本。
  • C89/C90 和 C99 之间的变化列表:http://port70.net/~nsz/c/c89/c9x_changes.html
  • C99 的 TC1(只有 TC,不是包含它的标准):http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/n32071.PDF
  • C99 的 TC2(只有 TC,不是包含它的标准):http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899-1999_cor_2-2004.pdf
  • ISO/IEC 9899:2011 (C11):
    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
  • ISO/IEC 9899:2011/Cor 1:2012(C11 的唯一技术勘误表):可在 https://www.iso.org/obp/ui/#iso:std:iso-iec:9899:ed-3:v1:cor:1:v1:en 上查看。但是不能下载。这是实际的更正,而不是草稿。
  • ISO/IEC 9899:2018 (C17/C18):
    https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf (N2176)
  • C2x 正在进行中 - 截至 2020 年 4 月 12 日的最新工作草案(N2596):
    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf

  • 对于 C++:
  • ISO/IEC 14882:1998 (C++98):
    http://www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf
  • ISO/IEC 14882:2003 (C++03):
    https://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf
  • ISO/IEC 14882:2011 (C++11):
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
  • ISO/IEC 14882:2014 (C++14):
    https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true
  • ISO/IEC 14882:2017 (C++17):
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf
  • ISO/IEC 14882:2020 (C++20):https://isocpp.org/files/papers/N4860.pdf
  • ISO/IEC 14882:2023(C++23 正在进行中。工作草案日期为 2021 年 3 月 17 日):http://open-std.org/JTC1/SC22/WG21/docs/papers/2021/n4885.pdf

  • 请注意,这些文件与标准不同,尽管 session 之前决定标准的版本通常与最终标准中的版本非常接近。 FCD(最终委员会草案)版本受密码保护;你需要加入标准委员会才能得到它们。
    尽管草案版本可能与标准的最终批准版本非常接近,但本文的一些编辑强烈建议您获取实际文档的拷贝——尤其是如果您打算引用它们作为引用。当然,如果手头拮据,挨饿的学生应该继续使用汇票。

    看来,如果您愿意并且能够在标准批准后等待几个月,那么在寻找标准时搜索“INCITS/ISO/IEC”而不是“ISO/IEC”是关键。通过这样做,本文的一位编辑能够以合理的价格找到 C11 和 C++11 标准。例如,如果您在 webstore.ansi.org 上搜索“INCITS/ISO/IEC 9899:2011”而不是“ISO/IEC 9899:2011”您会找到价格合理的 PDF 版本。

    本站https://wg21.link/提供指向 C++ 当前工作草案和标准草案以及委员会文件的短 URL 链接:
  • https://wg21.link/std11 - C++11
  • https://wg21.link/std14 - C++14
  • https://wg21.link/std17 - C++17
  • https://wg21.link/std20 - C++20
  • https://wg21.link/std - 当前工作草案

  • 该标准的当前草案在 Github 上作为 LaTeX 源进行维护。 .这些源代码可以使用 cxxdraft-htmlgen 转换为 HTML。 .以下站点维护如此生成的 HTML 页面:
  • Tim Song - Current working draft - C++11 - C++14 - C++17 - C++20
  • 鳗鱼- Current working draft

  • Tim Song还维护生成的网络 TS 和范围 TS 的 HTML 和 PDF 版本。
    C 标准的 POSIX 扩展
    POSIX标准 (IEEE 1003.1) 要求兼容的操作系统包含 C 编译器。该编译器又必须符合 C 标准,并且还必须支持 POSIX 的“系统接口(interface)”部分中定义的各种扩展(例如 off_t 数据类型、<aio.h> 头文件、clock_gettime() 函数和_POSIX_C_SOURCE 宏。)
    因此,如果您尝试查找特定函数,被告知“该函数是 POSIX 的一部分,而不是 C 标准的一部分”,并且想知道为什么操作系统标准强制要求编译器功能和语言扩展……现在您知道了!
  • POSIX.1-2001:系统接口(interface)部分可以作为单独的文档从 https://mirror.math.princeton.edu/pub/oldlinux/download/c951.pdf 下载.第 1.7 节指出 C 标准的相关版本是 C99。
    “Shell 和实用程序”部分 ( https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf ) 要求不仅应该存在符合 C99 的编译器,而且应该可以从命令行以名称“c99”调用它。实现这一点的一种方法是在/usr/bin 中放置一个名为“c99”的 shell 脚本,它使用 -std=c99 调用 gcc。选项添加到命令行参数列表,并阻止指定任何竞争标准。
    POSIX.1-2001 有两份技术勘误表,一份是 2002 年的,另一份是 2004 年的。我认为它们没有被合并到上面链接的文档中。在 https://pubs.opengroup.org/onlinepubs/009695399/ 有一个包含勘误表的在线 HTML 版本。 - 但我应该补充一点,我在搜索框方面遇到了一些问题,因此使用 Google 搜索该网站可能是您最好的选择。
    https://standards.ieee.org/standard/1003_1-2001-Cor1-2002.html 有一个付费链接可以下载第一个勘误表。 .
    https://standards.ieee.org/standard/1003_1-2001-Cor2-2004.html 处还有第二个付费链接。
  • POSIX.1-2008 的草案版本位于 http://www.open-std.org/jtc1/sc22/open/n4217.pdf .
    POSIX.1-2008 也有两个技术勘误,两个中的后者是 2016 年的。在 https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/ 有一个包含勘误的标准的在线 HTML 版本。 - 不过,我也遇到过网站自己的搜索框不适合查找信息的情况。
  • POSIX.1-2017 的在线 HTML 版本位于 https://pubs.opengroup.org/onlinepubs/9699919799/ - 不过,我再次建议使用 Google 而不是该网站的搜索框。根据Open Group website “IEEE 1003.1-2017 ......是对 1003.1-2008 标准的修订,以汇总标准,包括其两个技术勘误表(原样)”。 Linux manpages将其描述为“技术上相同”的 POSIX.1-2008,并应用了技术勘误表 1 和 2。因此,这不是重大修订,不会更改 _POSIX_C_SOURCE 的值。宏。
  • 关于c++ - 在哪里可以找到当前的 C 或 C++ 标准文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81656/

    相关文章:

    c++ - 引用将参数传递给函数时出现奇怪的编译错误

    c++ - 为什么使用 exit() 被认为是不好的?

    c++ - Asp.Net Core Dependency Injection 不起作用,如果它是从非托管/ native 启动的

    c++ - OpenGL:glVertexAttribFormat.attribindex 与 GLSL 顶点着色器位置

    c - 将字符串添加到字符数组的特定位置,导致 C 编程中的缓冲区溢出

    使用 'sprintf' 将十六进制转换为字符串

    c - 数组中内存的重新分配

    java - 标准方法名,为什么println中的l不是大写?

    css - 在 css 中编写 input[type=text] 或 input[type ="text"] 的更好方法是什么

    c++ - 来自 QSocket 的 readyRead() 信号的行为