对于许多问题,答案似乎在“标准”中找到。然而,我们在哪里找到它呢?最好是网上。
谷歌有时会让人觉得毫无意义,尤其是对于C标准,因为它们淹没在编程论坛上的讨论洪流中。
首先,因为这些是我现在正在搜索的,哪里有好的在线资源:
ISO标准需要花钱,从中等数额(PDF版本)到稍微多一点(纸质版本)。
虽然它们还没有最终定稿,但通常可以在网上找到草稿。大多数情况下,最终版本与上一版没有太大的不同,所以虽然不完美,但它们也很合适。
也有硬拷贝版本。请查阅Wiley出版的英国标准协会版本。
你可能会发现c++ 0x的国际标准草案很有用。
C99和c++ 03标准可从Wiley以书籍的形式获得:
此外,如前所述,未来标准的工作草案通常可从委员会网站获得:
C-201x草案是N1336, c++ 0x草案是N3225。
截至2022年3月2014年9月1日, PDF格式的官方C和c++标准文档按价格计算的最佳位置似乎是:
c++ 20 - ISO/IEC 14882:2020: 212加币(约165美元)
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: INCITS/ANSI提供116美元 / N2176 / c17_updated_proposed_fdis.pdf于2017年11月起草(链接中断,参见时光倒流机N2176)
C11 - ISO/ iec9899:2011: ansi.org的60美元 / WG14草案N1570 . ISO/ iec9899:2011: ansi.org的60美元 / WG14草案N1570 . ISO
C99 - INCITS/ISO/IEC 9899-1999(R2005): ansi.org的60美元 / WG14草案N1256版
C90 - ISO/IEC 9899:1990: 新西兰标准局90纽元(约65美元)
警告:标准草案的大多数副本以PDF格式发布,如果文本/HTML是从PDF转录或自动生成的,则可能会引入错误
(托管c++ 11工作草案纯文本版本的站点也有这种格式的一些c++ 14草案。但它们都不是最终工作草案N4140的副本。)
标准的印刷副本可以从国家标准机构和ISO获得,但非常昂贵。
如果你想以比上面少得多的钱获得C90标准的硬拷贝,你可以在亚马逊找到草Schildt的书注释的ANSI标准 . /em> . /em>的廉价二手副本,其中包含标准的实际文本(有用)和对标准的注释(不太有用-它包含几个危险和误导性的错误)。
C99和c++ 03标准可以从Wiley和BSI(英国标准协会)获得:
未来标准的工作草案通常可从委员会网站获得:
如果你想获得当前或更早的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节)中至少有一个文本差异,其中“list"变成了“带括号的清单”;。请注意,ANSI和ISO/IEC标准之间的转换在本文档中可以看到,该文档将其名称称为“ANSI/ISO: 9899/99”;虽然这不是后来制定的标准的正确名称,但正确的名称是“ISO/IEC 9899:1990")
TC1 for C90: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n423.pdf
ISO/IEC 9899:1999 (C99包含所有三个技术勘误): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf < / p >
原文的工作草案(即预更正)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
TC1 for C99(只是TC,不是包含它的标准):http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/n32071.PDF
TC2 for C99(只是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 < / p >
有关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) < / p >
C2x工作中-截至2022年8月7日的最新工作草案(N3047): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf < / p >
ISO/IEC 14882:2023 (c++ 23工作在进行中。工作草案日期为2022年3月17日):https://open-std.org/JTC1/SC22/WG21/docs/papers/2022/n4910.pdf
请注意,这些文档与标准并不相同,尽管在决定标准的会议之前的版本通常非常接近最终标准。FCD(最终委员会草案)版本有密码保护;你需要加入标准委员会才能得到它们。
尽管草案版本可能非常接近标准的最终批准版本,但本文的一些编辑强烈建议你获得一份实际文件的副本——特别是如果你打算引用它们作为参考的话。当然,如果囊中羞涩,饥肠辘辘的学生也可以使用汇票。
看起来,如果您愿意并且能够在标准批准后等待几个月,搜索“INCITS/ISO/IEC"而不是"ISO/IEC"当寻找一个标准是关键。通过这样做,本文的一位编辑能够以合理的价格找到C11和c++ 11标准。例如,如果您搜索“INCITS/ISO/IEC 9899:2011”;而不是“ISO/IEC 9899:2011”;在webstore.ansi.org你会找到价格合理的PDF版本。
https://wg21.link/站点提供了c++当前工作草案和标准草案以及委员会文件的短url链接:
该标准的当前草案在Github上作为LaTeX源进行维护。这些源可以使用cxxdraft-htmlgen转换为HTML。以下网站维护HTML页面生成:
蒂姆的歌还维护生成的HTML和PDF版本的Networking TS和Ranges TS。
POSIX标准(IEEE 1003.1)要求兼容的操作系统包含C编译器。这个编译器必须与C标准兼容,并且还必须支持“系统接口”中定义的各种扩展。POSIX的部分(例如off_t数据类型,<aio.h>报头,clock_gettime()函数和_POSIX_C_SOURCE宏)。
off_t
<aio.h>
clock_gettime()
_POSIX_C_SOURCE
因此,如果你试图查找一个特定的函数,被告知“这个函数是POSIX的一部分,而不是C标准”,并想知道为什么操作系统标准强制要求编译器特性和语言扩展……现在你知道了!
“贝壳与公用事业”;section (https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf)要求不仅应该存在一个c99兼容的编译器,而且它应该可以从命令行以“;c99"”的名称调用。实现这一点的一种方法是放置一个名为“c99”的shell脚本;在/usr/bin中,它调用gcc时将-std=c99选项添加到命令行参数列表中,并阻止指定任何竞争标准。
-std=c99
POSIX.1-2001有两个技术更正,一个日期为2002年,一个日期为2004年。我认为它们没有像上面链接的那样被纳入文件中。在https://pubs.opengroup.org/onlinepubs/009695399/上有一个在线HTML版本,包含了更正-但我应该补充一点,我在搜索框上遇到了一些麻烦,所以使用谷歌来搜索网站可能是你最好的选择。
在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也有两个技术更正,其中后者的日期是2016年。有一个在线HTML版本的标准,在https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/中包含了更正-尽管,我再次遇到过网站自己的搜索框不适合查找信息的情况。
C99是网上。引用自www.open-std.org:
该标准的最新公开版本是 合并C99 + TC1 + TC2 + TC3, WG14 N1256,日期2007-09-07。这是 WG14的工作文件,但它反映了统一的标准 发布时间。
实际的标准文档可能不是最有用的。大多数编译器并没有完全实现这些标准,有时甚至会发生冲突。所以你已经有的编译器文档会更有用。此外,文档将包含特定于平台的注释和任何注意事项。
该标准的在线版本可以在以下网站找到:
以下标准的所有草案版本:
以下所有内容均可免费下载 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 < / p > < p > 这是c++ 20标准: 此版本要求Authentication 2020-04-08: N4860 < / p > < p > 以下标准的所有草案版本: 以下所有内容均可免费下载 (其中许多可以在主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++ 11(+编辑修复):N3337 超文本标记语言, PDF
c++ 14(+编辑修复):N4140 超文本标记语言, PDF
C11 __abc0 (__abc1)
C99 N1256
标准的草稿在批准和出版之前散发征求意见。 请注意认为工作草案不是目前生效的标准,也不是已经发布的标准
标准的草稿在批准和出版之前散发征求意见。
请注意认为工作草案不是目前生效的标准,也不是已经发布的标准
ANSI C标准草案(又名C.89)的文本可以在网上找到。这是在ISO C标准(C.90)接受之前由ANSI委员会标准化的,所以章节的编号不同(ANSI章节2到4大致对应ISO章节5到7),尽管内容(应该)基本上相同。
虽然不是一个实际的标准,但ISO C (C89/90)有一个修正案,称为C94/95,或规范附录1。它被集成到C99中,尽管一些编译器(如铿锵声)允许你在命令行上指定-std=c94。ISO/IEC 9899:1990/Amd 1:1995可以从< >强赛全球< / >强以高昂的价格购买(PDF或硬拷贝)。
-std=c94
文档的摘要可以在在这里中找到。
当(当时的草案)ANSI C标准被考虑 在1990年采用国际标准时,有几个 反对意见,因为它没有解决国际化问题。 因为《标准》已经酝酿了好几年 同意做一些改动,以提供基础(为 例如,subsub7.10.7中的函数被添加),并且工作将 分别进行,提供适当的国际化 标准。这项工作在规范附录1中达到了高潮 规范性附录1体现了C对限制和限制的反应 国际字符集的承诺。有向图和 头文件是为了改善C程序的外观 没有{或}字符的ISO 646的国家变体。在 另一方面,连接和的设施 将旧标准勉强足够的基础扩展为 用于处理宽字符的完整且一致的实用程序集 和多字节字符串。 本文档总结了规范附录1。目的是 迅速告知已经熟悉标准的读者;它 没有,也不能介绍NA1背后的复杂主题, 也不能代替原始文档作为参考手册。 (尽管如此,它还是试图尽可能准确,以及它的作者
当(当时的草案)ANSI C标准被考虑 在1990年采用国际标准时,有几个 反对意见,因为它没有解决国际化问题。 因为《标准》已经酝酿了好几年 同意做一些改动,以提供基础(为 例如,subsub7.10.7中的函数被添加),并且工作将 分别进行,提供适当的国际化 标准。这项工作在规范附录1中达到了高潮 规范性附录1体现了C对限制和限制的反应 国际字符集的承诺。有向图和 头文件是为了改善C程序的外观 没有{或}字符的ISO 646的国家变体。在 另一方面,连接和的设施 将旧标准勉强足够的基础扩展为 用于处理宽字符的完整且一致的实用程序集 和多字节字符串。