对于许多问题,答案似乎可以在《标准》中找到.然而,我们在哪里可以找到呢?最好是在线.
谷歌搜索有时会感到徒劳,尤其是对于C标准,因为它们淹没在编程论坛上的讨论洪流中.
开始之前,既然这些都是我现在正在搜索的,那么在哪里有好的在线资源可以找到:
- C89
- C99
- C11
- C++98
- C++03
- C++11
- C++14
- C++17
对于许多问题,答案似乎可以在《标准》中找到.然而,我们在哪里可以找到呢?最好是在线.
谷歌搜索有时会感到徒劳,尤其是对于C标准,因为它们淹没在编程论坛上的讨论洪流中.
开始之前,既然这些都是我现在正在搜索的,那么在哪里有好的在线资源可以找到:
至于<罢工> 2014年9月1日罢工> 2021年9月,PDF中官方C和C++标准文件的最佳价格位置似乎是:
C++20-国际标准化组织/国际电工委员会14882:2020年:198 CHF (about $217 US) from iso.org
C++17–ISO/IEC 14882:2017:$90 NZD (about $65 US) from Standards New Zealand
C++14–ISO/IEC 14882:2014:$90 NZD (about $65 US) from Standards New Zealand
C++11-国际标准化组织/国际电工委员会14882-2011年:$60 from ansi.org或$60 from Techstreet
C++03–INCITS/ISO/IEC 14882:2003:$30 from ansi.org
C++98–ISO/IEC 14882:1998:$80 NZD (about $60 US) from Standards New Zealand
C17/C18-INCITS/ISO/IEC 9899:2018:$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–INCITS/ISO/IEC 9899-1999(R2005):$60 from ansi.org/WG14 draft version N1256
C90-ISO/IEC 9899:1990:$90 NZD (about $65 USD) from Standards New Zealand
100
(The site hosting the plain text version of the C++11 working draft also has some C++14 drafts in this format. But none of them are copies of the final working draft, N4140.)个
国家标准机构和ISO家公司提供标准的印刷版,但价格非常昂贵.
If you want a hardcopy of the C90 standard for much less money than above, you may be able to find a cheap used copy of Herb Schildt's book The Annotated ANSI Standard at Amazon, which contains the actual text of the standard (useful) and commentary on the standard (less useful - it contains several dangerous and misleading errors).
C99和C++03标准可从威利和BSI(英国标准协会)以图书形式获得:
future 标准的工作草案通常可从委员会网站上获得:
如果您想获得当前或早期C/C++标准的草稿,可以在internet上免费获得:
ANSI X3.159-198(C89): 我找不到C89的PDF,但它和C90几乎一样.唯一的主要区别在于样板和部分编号,尽管在文本上有一些细微的不同
ISO/IEC 9899:1990(C90):
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个
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)的工作草案.
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):
有关N1570与C11的最终发布版本之间差异的信息,请参见Latest changes in 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):
C2x在建工程——截至2020年10月18日的最新工作草案(N2731):
国际标准化组织/国际电工委员会14882:1998(C++98): http://www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf个
国际标准化组织/国际电工委员会14882:2003年(C++03): https://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf个
ISO/IEC 14882:2011(C++11):
国际标准化组织/国际电工委员会14882:2014年(C++14): https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true个
ISO/IEC 14882:2017(C++17):
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/提供了简短的URL链接到C++当前工作草案和草案标准,以及委员会文件:
本标准的现行草案保留为Github%的latex 源.这些源代码可以使用cxxdraft-htmlgen转换为HTML.以下网站维护这样生成的HTML页面:
Tim Song还维护生成的HTML和PDF版本的网络TS和范围TS.
POSIX标准(IEEE POSIX3.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 and Utilities"部分(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搜索该站点可能是您最好的 Select .
有一个付费链接可以在https://standards.ieee.org/standard/1003_1-2001-Cor1-2002.html下载第一个勘误表.
对于第二个https://standards.ieee.org/standard/1003_1-2001-Cor2-2004.html,还有一个付费墙链接
POSIX有一个草案版本.2008年1月http://www.open-std.org/jtc1/sc22/open/n4217.pdf日.
POSIX.1-2008也有两份技术勘误,后一份日期为2016年.有一个在线HTML版本的标准包含了https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/的更正-尽管我也遇到过网站自己的搜索框不适合查找信息的情况.
POSIX有一个在线HTML版本.2017年1月https://pubs.opengroup.org/onlinepubs/9699919799/日——不过,我再次建议使用谷歌而不是该网站的搜索框.根据Open Group website,"IEEE https://pubs.opengroup.org/onlinepubs/9699919799/3.1-2017……是对https://pubs.opengroup.org/onlinepubs/9699919799/3.1-2008标准的修订,以汇总该标准,包括其两个技术勘误(原样)".Linux manpages将其描述为与POSIX"技术相同".1-2008,适用技术勘误表1和2.因此,这不是一个重大修订,也不会改变_POSIX_C_SOURCE
宏的值.