提问人: 提问时间:9/17/2008 最后编辑:9 revs, 7 users 42%Christoffer 更新时间:9/23/2023 访问量:175755
在哪里可以找到当前的 C 或 C++ 标准文档?
Where do I find the current C or C++ standard documents?
问:
对于许多问题,答案似乎在“标准”中找到。但是,我们在哪里找到呢?最好是在线的。
谷歌搜索有时会让人觉得徒劳无功,尤其是对于 C 标准,因为它们被淹没在编程论坛上的大量讨论中。
首先,由于这些是我现在正在寻找的资源,因此哪里有很好的在线资源:
- C89型
- C99型
- C11型
- C++98
- C++03
- C++11
- C++14
- C++17
答:
ISO 标准需要花钱,从适度的金额(对于 PDF 版本)到更多(对于书籍版本)。
然而,虽然它们尚未最终确定,但通常可以在网上找到草稿。大多数时候,最终版本与上一稿没有太大区别,所以虽然不完美,但它们会很适合。
ISO C 和 C++ 标准非常昂贵。另一方面,INCITS 以更低的价格重新发布它们。http://www.techstreet.com/ 似乎有 30 美元的 PDF (搜索 INCITS/ISO/IEC 14882:2003)。
也提供硬拷贝版本。查找由 Wiley 发布的英国标准协会版本。
评论
您可能会发现 C++0x 的国际标准草案很有用。
C99 和 C++03 标准以书籍形式从 Wiley 获得:
此外,如前所述,未来标准的工作草案通常可从委员会网站上获得:
标准的PDF版本
截至 2014 年 9 月 1 日至 2022 年 3 月,PDF 中官方 C 和 C++ 标准文档按价格计算的最佳位置似乎是:
C++20 – ISO/IEC 14882:2020:212 加元(约 165 美元)起 csagroup.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:新西兰标准局95新西兰元(约合65美元)
C17/C18 – INCITS/ISO/IEC 9899:2018:2017 年 11 月的 INCITS/ANSI / N2176 / c17_updated_proposed_fdis.pdf草案 116 美元(链接断开,参见 Wayback Machine N2176 )
C11 – ISO/IEC 9899:2011:60 美元,ansi.org / WG14 草案版本 N1570
C99 – INCITS/ISO/IEC 9899-1999(R2005):60 美元,ansi.org / WG14 草案版本 N1256
C90 – ISO/IEC 9899:1990:新西兰标准局 90 新西兰元(约 65 美元)
标准的非PDF电子版本
警告:大多数标准草稿的副本都以 PDF 格式发布,如果文本/HTML 是从 PDF 转录或自动生成的,则可能会引入错误。
- 最新的 C 标准 – ISO 在线浏览平台,可查看但不可下载:(https://www.iso.org/obp/ui/#iso:std:iso-iec:9899)
- 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)
- C99 – 草稿版本 (N1256) 作为 HTML 文档:(http://port70.net/~nsz/c/c99/n1256.html)
- C11 – 草稿版本 (N1570) 作为 HTML 文档:(http://port70.net/~nsz/c/c11/n1570.html)
- C++11 – 工作草案 (N3337) 作为纯文本文件:(http://port70.net/~nsz/c/c%2B%2B/c%2B%2B11_n3337.txt)
(托管 C++11 工作草案纯文本版本的网站也有一些这种格式的 C++14 草案。但它们都不是最终工作草案 N4140 的副本。
标准的打印版本
标准的印刷副本可从国家标准机构和 ISO 获得,但非常昂贵。
如果您想要以比上述便宜得多的价格获得 C90 标准的硬拷贝,您可以在亚马逊上找到 Herb Schildt 的《带注释的 ANSI 标准》一书的廉价二手副本,其中包含标准的实际文本(有用)和标准注释(不太有用 - 它包含一些危险和误导性错误)。
C99 和 C++03 标准可从 Wiley 和 BSI(英国标准协会)以书籍形式获得:
标准委员会草案版本(免费)
未来标准的工作草案通常可从委员会网站上获得:
如果您想从当前或更早的 C/C++ 标准中获取草稿,互联网上有一些免费提供:
对于 C:
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
C99 的早期版本仅包含 TC1 和 TC2: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
有关 N1570 与 C11 最终发布版本之间的差异的信息,请参阅 C11 和 https://groups.google.com/g/comp.std.c/c/v5hsWOu5vSw 的最新更改
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)
C23 正在进行中 - 截至 2023 年 4 月 1 日的最新工作草案 (N3096):https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.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://web.archive.org/web/20180922024431/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):https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.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 链接:
- 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 - 当前工作草案(截至 2022 年 5 月仍指向 2021 年版本)
该标准的当前草案在 Github 上作为 LaTeX 源代码进行维护。这些源代码可以使用 cxxdraft-htmlgen 转换为 HTML。以下网站维护如此生成的 HTML 页面:
Tim Song 还维护生成的 Networking TS 和 Ranges TS 的 HTML 和 PDF 版本。
POSIX 对 C 标准的扩展
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
POSIX.1-2008 的草案版本位于 http://www.open-std.org/jtc1/sc22/open/n4217.pdf。
POSIX.1-2008 还有两份技术勘误,其中后者的日期为 2016 年。该标准有一个在线HTML版本,其中包含 https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/ 的勘误 - 尽管我再次遇到过网站自己的搜索框不利于查找信息的情况。
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
评论
C99 可在线获取。引自 www.open-std.org:
该标准的最新公开版本是 组合 C99 + TC1 + TC2 + TC3,WG14 N1256,日期为 2007-09-07。这是 WG14 工作文件,但它反映了 发行时间。
实际的标准文档可能不是最有用的。大多数编译器没有完全实现这些标准,有时实际上可能会发生冲突。因此,您已经拥有的编译器文档将更有用。此外,该文档将包含特定于平台的备注和有关任何警告的注释。
评论
该标准的在线版本如下:
工作草案,编程语言 C++ 标准
以下是该标准的所有草案版本:
以下所有内容均可
免费下载 2023-08-14: N4958
这是 C++23 标准:
2023-05-10:N4950
作为上述内容的来源,请参阅 N4951,其中指出:“
N4950 是 C++23 的当前和最终工作草案。它取代了N4944,并构成了C++23国际标准草案的基础。...下一个工作草案将是针对C++26的。
以下所有标准草案版本: 以下所有内容均可
免费下载 2023-03-22:N4944 2022-12-18:N4928 2022-09-05:N4917 2022-03-17:N4910 2021-10-22:N4901 2021-06-18:N4892 2021-03-17:N4885
2020-12-15:
N4878
2020-10-18:N4868
2020-04-08:N4861
这是 C++20 标准:
2020-04-08:N4860
关于 N4860 和 N4861 的说明:
根据 N4859:“
N4860 和 N4861 的内容完全相同,除了封面、页眉和页脚,以及 N4861 不包含来自 ISO C++ 2017 的交叉引用索引。
以下是该标准的所有草案版本: 以下所有内容均可
免费下载(其中许多可以在此主要 GitHub 链接中找到)
2020-01-14:N4849 2019-11-27:N4842 2019-10-08:N4835 git 2019-08-15:N4830 git 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
这是旧的 C++17 标准: 此版本需要身份验证: 2017-03-21: N4660
此版本不需要身份验证: 2017-03-21:
N4659 git
N4661 明确指出:“N4659 和 N4660 的内容完全相同,但封面和页面标题除外。
以下所有标准草案版本:
以下所有内容均可免费下载
2017-02-06: N4640 git 2016-11-28: N4618 git 2016-07-12: N4606 git 2016-05-30: N4594 git 2016-03-19: N4582 git 2015-11-09: N4567 git 2015-05-22: N4527 git 2015-04-10: N4431 git
2014-11-19: N4296 git
这是旧的 C++14 标准:
这些版本需要身份验证
2014-10-07: N4140 git 本质上是 C++14,修正了小错误和错别字 2014-09-02: N4141 git 标准 C++14 2014-03-02: N3937
2014-03-02: N3936 git
以下所有标准草案版本: 以下所有内容均可
免费下载 2013-10-13: N3797 git 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
以下是该标准的所有草案版本: 以下所有内容均可
免费下载 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++
其他有趣的论文:
2023 / 2022 / 2021 / 2020 / 2019 / 2018 / 2017 / 2016 / 2015 / 2014 / 2013 / 2012 / 2011
评论
草稿链接:
货号:C99 N1256
该标准的草案在批准和发布之前分发征求意见。
请注意,工作草案不是当前有效的标准,也不完全是已发布的标准
评论
ANSI C标准(又名C.89)草案的文本可在线获取。在被ISO C标准(C.90)接受之前,ANSI委员会对此进行了标准化,因此各部分的编号不同(ANSI第2至4部分大致对应于ISO第5至第7部分),尽管内容(应该)大致相同。
评论
[0, 60]
[0, 61]
tm_sec
(0, 61)
虽然不是实际标准,但对 ISO C (C89/90) 有一个修订,称为 C94/95,或规范性附录 1。它被集成到 C99 中,尽管某些编译器(如 Clang)允许您在命令行上指定。ISO/IEC 9899:1990/AMD 1:1995 可以从 SAI GLOBAL 以高昂的价格购买(PDF 或硬拷贝)。-std=c94
可以在此处找到该文件的摘要。
当(当时的草案)ANSI C 标准被考虑用于 1990 年采用国际标准,有几个 反对意见,因为它没有解决国际化问题。 因为该标准已经酝酿了好几年,所以它 会议商定将作一些修改,以提供基础( 例如,添加了第 7.10.7 小节中的函数),并且工作将 单独进行,以提供适当的国际化 标准。这项工作在规范性附录 1 中达到顶峰。
规范性附录 1 体现了 C 对限制和 国际字符集的承诺。二元图和 标头旨在改进用 ISO 646 的国家变体,例如不带 { 或 } 字符。在 频谱的另一端,连接到和 将旧标准勉强够用的基础扩展为 用于处理宽字符的完整且一致的实用程序集 和多字节字符串。
本文件总结了规范性附录 1。它旨在 快速通知已经熟悉该标准的读者;它 没有也不能介绍NA1背后的复杂主题, 它也不能取代原始文件作为参考手册。 (尽管如此,它试图尽可能准确,其作者 想听听任何错误或遗漏。
评论