标准的 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:60 美元,来自 ansi.org or 科技街 60 美元
-
C++03 – INCITS/ISO/IEC 14882:2003:30 美元,来自 ansi.org
-
C++98 – ISO/IEC 14882:1998:新西兰标准局 95 新西兰元(约合 65 美元)
-
C17/C18 – INCITS/ISO/IEC 9899:2018:INCITS/ANSI 116 美元 / N2176 / c17_updated_propose_fdis.pdf 2017 年 11 月草稿(链接已损坏,请参阅时光机 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 标准的硬拷贝,并且价格比上面少得多,您也许可以找到一份便宜的二手拷贝赫伯·希尔特's book 带注释的 ANSI 标准 at Amazon,其中包含标准的实际文本(有用)和标准的评论(不太有用 - 它包含一些危险和误导性错误)。
Wiley 和 BSI(英国标准协会)以书籍形式提供了 C99 和 C++03 标准:
标准委员会草案版本(免费)
未来标准的工作草案通常可以从委员会网站获得:
如果您想获取当前或早期 C/C++ 标准的草稿,可以在互联网上免费获得一些:
For 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)中至少有一个文本差异,其中"a list" became “用大括号括起来的列表”。请注意,在本文档中可以看到 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
-
上没有 TC2 的 PDF 链接WG14 网站, sadly.
-
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最新变化 and 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_propose_fdis.pdf (N2176)
-
C23 正在进行中 - 截至 2023 年 4 月 1 日的最新工作草案 (N3096):https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
For 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 标准。例如,如果您在以下位置搜索“INCITS/ISO/IEC 9899:2011”而不是“ISO/IEC 9899:2011”网上商店.ansi.org您会找到价格合理的 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 年版本)
该标准的当前草案作为 LaTeX 源保留在Github。这些源可以使用以下命令转换为 HTMLcxxdraft-htmlgen。以下站点维护如此生成的 HTML 页面:
- 蒂姆·宋 -目前的工作草案 - C++11 - C++14 - C++17 - C++20
- Eelis - 目前的工作草案
Tim Song还维护生成的网络 TS 和范围 TS 的 HTML 和 PDF 版本。
C 标准的 POSIX 扩展
The POSIX标准 (IEEE 1003.1) 要求兼容的操作系统包含 C 编译器。该编译器又必须符合 C 标准,并且还必须支持 POSIX 的“系统接口”部分中定义的各种扩展(例如off_t
数据类型,<aio.h>
标头,clock_gettime()
函数和_POSIX_C_SOURCE
macro.)
因此,如果您尝试查找某个特定函数,并被告知“该函数是 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 年。我认为它们没有合并到上面链接的文档中。有一个包含勘误的在线 HTML 版本:https://pubs.opengroup.org/onlinepubs/009695399/- 但我应该补充一点,我在使用搜索框时遇到了一些问题,因此使用 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/- 不过,我也遇到过网站自己的搜索框不适合查找信息的情况。
-
POSIX.1-2017 的在线 HTML 版本位于https://pubs.opengroup.org/onlinepubs/9699919799/- 不过,我再次建议使用 Google 而不是该网站的搜索框。根据开放集团网站“IEEE 1003.1-2017 ...是对 1003.1-2008 标准的修订版,汇总了该标准,包括其两个技术勘误(按原样)”。Linux 联机帮助页将其描述为与 POSIX.1-2008“技术上相同”,并应用了技术勘误表 1 和 2。因此,这不是重大修订,也不会改变_POSIX_C_SOURCE
macro.