![](/img/trans.png)
[英]How do I find the revision of C++ standard, where a specific requirement was removed or changed?
[英]Where do I find the current C or C++ standard documents?
对于许多问题,答案似乎可以在“标准”中找到。 然而,我们从哪里找到呢? 最好是在线的。
谷歌搜索有时会感到徒劳,尤其是对于 C 标准,因为它们淹没在编程论坛上的大量讨论中。
首先,因为这些是我现在正在搜索的,所以哪里有好的在线资源:
截至
2014 年
9 月
1 日,
2021
年
9 月,PDF 格式的官方 C 和 C++ 标准文档的最佳价格位置似乎是:
C++20 – ISO/IEC 14882:2020: 198 CHF(约 217 美元)来自 iso.org
C++17 – ISO/IEC 14882:2017:新西兰标准 90 新西兰元(约合 65 美元)
C++14 – ISO/IEC 14882:2014:新西兰标准 90 新西兰元(约合 65 美元)
C++11 – ISO/IEC 14882:2011: ansi.org 60 美元或Techstreet 60 美元
C++03 – INCITS/ISO/IEC 14882:2003: ansi.org 30 美元
C++98 – ISO/IEC 14882:1998:新西兰标准 80 新西兰元(约合 60 美元)
C17/C18 – INCITS/ISO/IEC 9899:2018: 116 美元来自 INCITS/ANSI / N2176/c17_updated_proposed_fdis.pdf 草案,2017 年 11 月(链接断开,参见Wayback Machine N2176 )
C11 – ISO/IEC 9899:2011: $30 $60 from ansi.org / WG14 草案版本 N1570
C99 – INCITS/ISO/IEC 9899-1999(R2005): ansi.org/WG14草案版本 N1256 60 美元
C90 – ISO/IEC 9899:1990:新西兰标准 90 新西兰元(约 65 美元)
标准的印刷副本可从国家标准机构和ISO 获得,但非常昂贵。
如果您想要一份 C90 标准的硬拷贝,但价格比上面少得多,您可以在亚马逊找到Herb Schildt的书The Annotated ANSI Standard的廉价二手副本,其中包含标准的实际文本(有用)和对标准的评论(不太有用 - 它包含几个危险和误导性的错误)。
C99 和 C++03 标准可从 Wiley 和 BSI(英国标准协会)以书籍形式获得:
未来标准的工作草案通常可从委员会网站获得:
如果您想从当前或更早的 C/C++ 标准中获取草稿,可以在 Internet 上免费获得一些草稿:
ANSI X3.159-198 (C89):我找不到 C89 的 PDF,但它与 C90 几乎相同。 唯一的主要区别在于样板和部分编号,尽管有一些轻微的文本差异
ISO/IEC 9899:1990 (C90):(除了前言和章节编号外,几乎与 ANSI X3.159-198 (C89) 相同。第 6.5.7 节(以前是 3.5.7)中至少有一处文本差异, 其中“列表”变成了“括号括起来的列表” 。请注意,在本文档中可以看到 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 网站上没有 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
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
请注意,这些文件与标准不同,尽管会议之前决定标准的版本通常与最终标准中的版本非常接近。 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 链接:
该标准的当前草案在Github上作为 LaTeX 源进行维护。 可以使用cxxdraft-htmlgen将这些源转换为 HTML。 以下站点维护如此生成的 HTML 页面:
Tim Song还维护生成的 HTML 和 PDF 版本的 Networking TS 和 Ranges TS。
POSIX标准 (IEEE 1003.1) 要求兼容的操作系统包含 C 编译器。 该编译器又必须符合 C 标准,并且还必须支持 POSIX 的“系统接口”部分中定义的各种扩展(例如off_t
数据类型、 <aio.h>
标头、 clock_gettime()
函数和_POSIX_C_SOURCE
宏。)
因此,如果您尝试查找特定函数,被告知“该函数是 POSIX 的一部分,而不是 C 标准的一部分”,并且想知道为什么操作系统标准强制要求编译器功能和语言扩展……现在您知道了!
POSIX.1-2001:系统接口部分可以作为单独的文档从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 脚本,它调用 gcc 并将-std=c99
选项添加到命令行参数列表中,并阻止任何竞争标准被指定。
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 上还有一个付费链接
http://www.open-std.org/jtc1/sc22/open/n4217.pdf 上有 POSIX.1-2008 的草稿版本。
POSIX.1-2008 也有两个技术勘误,两个中的后者是 2016 年的。在https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/有一个包含勘误的标准的在线 HTML 版本 - 虽然再次,我遇到过网站自己的搜索框不适合查找信息的情况。
https://pubs.opengroup.org/onlinepubs/9699919799/ 上有 POSIX.1-2017 的在线 HTML 版本 - 不过,我再次建议使用 Google 而不是该网站的搜索框。 根据Open Group 网站的说法,“IEEE 1003.1-2017 ...是对 1003.1-2008 标准的修订,以汇总该标准,包括其两个技术勘误表(原样)”。 Linux 联机帮助页将其描述为与 POSIX.1-2008“技术上相同”,并应用了技术勘误表 1 和 2。 因此,这不是主要修订,并且不会更改_POSIX_C_SOURCE
宏的值。
可以找到该标准的在线版本:
以下是标准的所有草案版本:
以下所有内容均可免费下载
(其中许多可以在这个主要的 GitHub 链接中找到)
2021-03-17: N4885
2020-12-15: N4878
2020-10-18: N4868
2020-04-08: N4861
2020-01-14: N4849
2019-11-27: N4842
2019-10-08: N4835 git
2019年8月15日: N4830混帐
2019-06-17: N4820 git
2019-03-15: N4810 git
2019-01-21: N4800 git
2018-11-26: N4791 git
2018-10-08: N4778 git
2018-07-07: N4762 git
2018-05-07: N4750 git
2018-04-02 : N4741 git
2018-02-12 : N4727 git
2017-11-27: N4713 git
2017-10-16: N4700 git
2017-07-30: N4687 git
这似乎是新标准:
这些版本需要身份验证
2017-03-21:N4660是 C++17 草案标准
以下是标准的所有草案版本:
以下所有内容均可免费下载
2017-03-21: N4659 git
2017-02-06: N4640 git
2016-11-28: N4618git
2016-07-12: N4606git
2016-05-30: N4594git
2016-03-19: N4582git
2015-11-09: N4567git
2015-05-22: N4527git
2015-04-10: N4431git
2014-11-19: N4296git
这似乎是旧的 C++14 标准:
这些版本需要身份验证
2014-10-07:N4140git本质上是 C++14,修正了小错误和拼写错误
2014-09-02:N4141 git标准 C++14
2014-03-02:N3937
2014-03-02:N3936 git
以下是标准的所有草案版本:
以下所有内容均可免费下载
2013-10-13: N3797git
2013-05-16: N3691
2013-05-15: N3690
2012-11-02: N3485
2012-02-28: N3376
2012-01-16: N3337 git本质上是 C++11,修正了一些小错误和拼写错误
这似乎是旧的 C++11 标准:
此版本需要身份验证
2011-04-05:N3291 C++11(或非常接近)
以下是标准的所有草案版本:
以下所有内容均可免费下载
2011-02-28: N3242 (与N3291 的差异很小)
2010-11-27: N3225
2010-08-21: N3126
2010-03-29: N3090
2010-02-16: N3035
2009-11-09: N3000
2009-09-25: N2960
2009-06-22: N2914
2009-03-23: N2857
2008-10-04: N2798
2008-08-25: N2723
2008-06-27: N2691
2008-05-19: N2606
2008-03-17: N2588
2008-02-04: N2521
2007-10-22: N2461
2007-08-06: N2369
2007-06-25: N2315
2007-05-07: N2284
2006-11-03: N2134
2006-04-21: N2009
2005-10-19: N1905
2005-04-27: N1804
这似乎是旧的 C++03 标准:
以下所有版本都需要身份验证
2004-11-05:N1733
2004-07-16:N1655非官方
2004-02-07:N1577 C++03(或非常接近)
2001-09-13: N1316扩展技术勘误草案
1997-00-00:N1117 扩展技术勘误草案
以下是标准的所有草案版本:
以下所有内容均可免费下载
1996-00-00: N0836扩展技术勘误草案
1995-00-00:N0785 信息系统国际标准草案的工作文件 - 编程语言 C++
2021 / 2020 / 2019 / 2018 / 2017 / 2016 / 2015 / 2014 / 2013 / 2012 / 2011
C99可在线获得。 引自www.open-std.org :
该标准的最新公开版本是组合 C99 + TC1 + TC2 + TC3, WG14 N1256 ,日期为 2007-09-07。 这是 WG14 工作文件,但它反映了发布时的合并标准。
您可能会发现 C++0x 的国际标准草案很有用。
ISO 标准需要花钱,从中等(对于 PDF 版本)到更多(对于书籍版本)。
然而,虽然它们还没有最终确定,但它们通常可以在网上找到,作为草稿。 大多数情况下,最终版本与上一稿没有太大区别,因此虽然不完美,但它们很适合。
C99 和 C++03 标准可从 Wiley 以书籍形式获得:
另外,正如已经提到的,未来标准的工作草案通常可以从委员会网站上获得:
ISO C 和 C++ 标准非常昂贵。 另一方面,INCITS 重新发布它们的价格要低得多。 http://www.techstreet.com/似乎有 30 美元的 PDF(搜索 INCITS/ISO/IEC 14882:2003)。
也有硬拷贝版本。 查找由 Wiley 出版的英国标准协会版本。
实际的标准文件可能不是最有用的。 大多数编译器并没有完全实现标准,有时可能会发生实际冲突。 因此,您已经拥有的编译器文档将更有用。 此外,该文档将包含特定于平台的备注和有关任何警告的注释。
虽然不是一个实际的标准,有一个修正案称为C94 ISO C(C89 / 90)/ 95,或标准附录1.它被集成到C99,尽管一些编译器,如锵允许你specifiy -std=c94
上的命令行。 ISO/IEC 9899:1990/Amd 1:1995 可以从SAI GLOBAL (PDF 或硬拷贝)以高价购买。
可以在此处找到该文档的摘要。
当(当时的草案)ANSI C 标准在 1990 年被考虑采用国际标准时,有几个反对意见,因为它没有解决国际化问题。 由于该标准已经制定了几年,因此同意进行一些更改以提供基础(例如,增加了第 7.10.7 条中的功能),并将单独开展工作以提供标准的适当国际化。 这项工作在规范性附录 1 中达到了高潮。
规范附录 1 体现了 C 对国际字符集的限制和承诺的反应。 有向图和标题旨在改善用 ISO 646 的国家变体编写的 C 程序的外观,没有 { 或 } 字符。 另一方面,这些工具连接到旧标准勉强足够的基础并将其扩展为一组完整且一致的实用程序,用于处理宽字符和多字节字符串。
本文件总结了规范性附录 1。旨在快速通知已经熟悉该标准的读者; 它没有也不能介绍NA1背后的复杂主题,也不能代替原始文档作为参考手册。 (尽管如此,它会尽可能准确,作者希望了解任何错误或遗漏。)
http://c0x.coding-guidelines.com/包含C标准的基于HTML的可搜索版本。 实际上,是一个稍微修改的版本:
该网站包含N1256的修改版本。 它包括已从C99中删除的措辞(即以删除线的形式)和曾经出现在C99中的措辞(即以下划线的形式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.