在哪里可以找到最新的C或C ++标准文档?


394

对于许多问题,答案似乎可以在“标准”中找到。但是,我们在哪里找到呢?最好在线。

有时,谷歌搜索有时会徒劳无功,特别是对于C标准,因为它们淹没在编程论坛上的讨论中。

首先,由于这些是我现在正在搜索的内容,因此在哪里有不错的在线资源:

  • C89
  • C99
  • C11
  • C ++ 98
  • C ++ 03
  • C ++ 11
  • C ++ 14
  • C ++ 17

4
注意有关MSO的讨论。这个问题的答案对C和C ++程序员很有价值。它应该保持开放状态(尤其是因为一旦发布,就有一个C ++ 2014标准可以添加到答案中-它已经被批准)。
乔纳森·莱夫勒

Answers:


439

PDF版本的标准

截至2014年9月1日,按价格提供C和C ++标准文档的最佳位置是:

在发布新版本的标准后不久,通常无法直接从标准机构获得标准(任何标准)的旧修订版。因此,很难从标准机构中找到C89,C90,C99,C ++ 98,C ++ 03的标准。如果您需要标准的旧版本,请选择Techstreet作为可能的来源。例如,它仍然可以收费提供加拿大版本的CAN / CSA-ISO / IEC 9899:1990 PDF标准。

标准的非PDF电子版本

打印标准版

该标准的印刷本可从国家标准机构和ISO获得,但价格昂贵。

如果你想少得多的钱比高于C90标准的硬拷贝,你可以找到一个便宜的二手副本草本Schildt的书附注的ANSI标准亚马逊,它包含了标准的实际文本(有用)以及有关标准的评论(没什么用处-它包含一些危险和误导性错误)。

Wiley和BSI(英国标准协会)以书本形式提供C99和C ++ 03标准:

标准委员会草案版本(免费)

未来标准的工作草案通常可以从委员会的网站上获得:

如果要从当前或较早的C / C ++标准中获取草稿,则可以从Internet上免费获得一些草稿:

对于C:

对于C ++:

请注意,尽管确定标准的会议之前的版本通常与最终标准中的内容非常接近,但这些文档与标准不同。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还维护Networking TS和Ranges TS的生成的HTML和PDF版本。


60
希尔德的书的问题在于他的评论严重贬低了他评论的标准。
2011年

57
非常糟糕的书本推荐(Herb Schildt's),请参见:lysator.liu.se/c/schildt.html
Wiz

11
我知道该评论-我提到这本书只是作为一种非常便宜地获得该标准的可能方式。但是我想人们也应该了解这次审查。如果您想要便宜的标准硬拷贝(我就是这样做的话),我建议您不要理会这本书的注释部分。
Michael Burr

37
Schildt的书(我认为已绝版)比实际标准的印刷版便宜得多。建议价格差异反映注释的价值。本书的每本副本均应附有Clive DW Feather的《带注释的C标准》的打印输出。(请注意,Schildt的书中缺少一些介绍性材料。)
Keith Thompson,

12
@MichaelBurr,所有标准都可以在www.open-std.org上免费找到,因为您已经接受了答案,如何更改到免费链接的链接呢?
Shahbaz 2012年

429

该标准的在线版本可以找到:

工作草案,C ++编程语言标准

以下是该标准的所有草案版本以下所有版本
均可免费下载
(其中许多可在此主要GitHub链接上找到
2020-01-14: N4849 git
2019-11-27: N4842 git
2019-10-08: N4835 的Git
2019年8月15日: N4830 的git
2019年6月17日: N4820 的git
2019年3月15日: N4810 的git
2019年1月21日: N4800 的git
2018年11月26日: N4791 的git
2018年10月8日: N4778 混帐
2018-07-07: N4762 git
2018-05-07:N4750 的Git
2018年4月2日:N4741 的git
2018年2月12日:N4727 的git
2017年11月27日:N4713 的git
二○一七年十月一十六日:N4700 的git
2017年7月30日:N4687 混帐

这似乎是新标准:
这些版本需要身份验证
2017-03-21: N4660是C ++ 17草案标准

以下标准的所有版本草案
以下所有条件都可以免费下载
2017年3月21日: N4659 的git
2017年2月6日: N4640 的git
2016年11月28日: N4618 的git
2016年7月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 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 ++

其他有趣的论文:

到2020年 / 2019年 / 2018年 / 2017年 / 2016年 / 到2015年 / 2014年 / 2013年 / 2012年 / 2011年


1
您可能要提及链接将带您进入的标准!还添加了C11标准:open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Shahbaz

@Shahbaz:我不熟悉C标准的所有副本(因为我不编写C代码(仅C ++))。您可能想开始自己的答案或编辑以下明确涉及C语言的答案之一(请参阅此内容下方的一个)。
马丁·约克

17
+1可以保持比ISO工作组21都要更新的列表。
伦丁2013年

5
清单+1;只是要补充说,所有草稿都可以在git仓库github.com/cplusplus/draft中获得。您可以将链接添加到isocpp.org/std/the-standard
pepr

@ShafikYaghmour:好像他们已将其锁定(通常意味着其正式发布)。我已更新了指向需要身份验证的版本的链接(即,您为此付费)。
马丁·约克


26

草案链接:

C ++ 11(+版本修复):N3337 HTMLPDF

C ++ 14(+版本修复):N4140 HTMLPDF

C11 N1570文字

C99 N1256

在批准和发布之前,将标准草案分发以征求意见。

请注意,工作草案不是当前有效的标准,也不完全是已发布的标准


“ N1169”链接转到包含一些缺陷报告的四页文档。它绝不是C ++(或任何其他)标准的草案。
加雷斯·麦考恩

我喜欢这个答案,因为它可以清楚说明每个主要版本的最新草案。
西罗Santilli郝海东冠状病六四事件法轮功


12

ISO标准的成本从中等的金额(对于PDF版本)到更高的成本(对于书籍版本)。

尽管尚未最终确定,但通常可以在网上找到它们作为草稿。在大多数情况下,最终版本与上一次草稿并没有太大的区别,因此虽然不完美,但也很合适。



4

ISO C和C ++标准非常昂贵。另一方面,INCITS重新发布的费用要少得多。http://www.techstreet.com/似乎有30美元的PDF(搜索INCITS / ISO / IEC 14882:2003)。

也提供硬拷贝版本。查找由Wiley发行的British Standards Institute版本。


目前,techstreet.com的C格式的C ++ 2003标准为30美元,C ++ 2011的标准为403美元。
基思·汤普森

非常感谢您提供给Techstreet的链接。ANSI.org的网上商店不会向我出售C11标准(出于“安全”原因(即没有充分的理由)而拒绝使用信用卡),而在Techstreet进行的等价购买(使用同一张卡)进行得很顺利,而且没有拴住。
阿托·本迪肯

4

实际的标准文档可能不是最有用的。大多数编译器没有完全实现标准,有时可能会发生冲突。因此,您已经拥有的编译器文档将更加有用。此外,文档还将包含特定于平台的注释和任何注意事项的注释。


24
编译器文档很重要,但是了解语言而不是了解您的实现要重要得多。
Spidey 2012年

2
使用实际的标准,您可以在编译器中找到错误,并通过修补它们,提交错误报告或仅进入IRC房间并与可以修复它的人员进行交谈,来帮助他们更好地遵循标准。
hdante

3
@hdante-绝对。如果标准本身就是理想的选择,则可以要求供应商提供兼容性。@ / all-这里的目的并不是要说标准没有用(仅供参考,首先从标准开始就是我过去采用的方法),但是您还必须知道现实世界的起点,希望符合标准。
克里斯·库姆勒

6
无论如何,编译器文档倾向于忽略标准中涵盖的内容。
SamB

4

可以在线获得ANSI C标准草案(又名C.89)的文本。这是在被ISO C标准(C.90)接受之前由ANSI委员会进行标准化的,因此各部分的编号有所不同(ANSI第2至4部分大致对应于ISO第5至7部分),尽管内容是(假定的)大致相同)。


真的是最后的草稿吗?我知道的一个区别是,此草案将tm_sec的范围指定为[0, 60],而C90(错误地)指定为Cubbi[0, 61]
13年

@Cubbi,由于我无法亲自证明是这样,因此我修改了措辞。谢谢。
jxh

@Cubbi:他确实说这是ANSI标准的最新草案。听起来ISO WG中的某个人感到困惑,并认为一年中可能的两个two秒也可能在同一分钟之内/之后发生。。。或者他们从POSIX中得到了错误,却没有说出错误的出处。从,只有他们固定它与C99对齐。
SamB

K&R第二版 (ANSI C),这是基于实际最终标准,是否指定tm_sec(0, 61)。我以为那是leap秒,很有意义。
veganaiZe

@veganaiZe范围为[0,60]以允许leap秒(否则为[0,59])。[0,61]是一个错误,表示可能在同一分钟内有两个leap秒(不是)。
基思·汤普森

2

尽管不是实际标准,但对ISO C(C89 / 90)进行了修订,称为C94 / 95或标准附录1。尽管某些编译器(例如Clang)允许您-std=c94在命令行上进行指定,但它已集成到C99中。可以从SAI GLOBAL以高价购买ISO / IEC 9899:1990 / Amd 1:1995 (PDF或印刷本)。

可以在此处找到该文档的摘要。

当ANSI C标准(当时的草案)在1990年被考虑采用国际标准时,由于它没有解决国际化问题而引起了一些反对。由于该标准已经制定了几年,因此同意对基础进行一些更改(例如,添加了第7.10.7节中的功能),并且将单独进行工作以提供基础。标准的适当国际化。这项工作在规范性附录1中达到了高潮。

规范性附录1体现了C对国际字符集的局限性和承诺的反应。图和标头旨在改善以ISO 646的国家变体编写的C程序的外观,而无需使用{或}字符。另一方面,这些设施仅将旧标准的勉强充分的基础连接起来并扩展到一套完整,一致的实用程序中,以处理宽字符和多字节字符串。

本文档概述了规范性附录1。其目的是为了快速告知已经熟悉该标准的读者。它不会也不能介绍NA1背后的复杂主题,也不能代替原始文档作为参考手册。(尽管如此,它试图尽可能准确,其作者希望听到任何错误或遗漏。)


-6

http://c0x.coding-guidelines.com/包含C标准的基于HTML的可搜索版本。实际上,是一个稍微修改的版本:

该网站包含N1256的修改版本。它包括已从C99中删除的措辞(即以删除线的形式)和以前在C99中出现的措辞(即以下划线的形式)。


2
该网站无用,因为大多数页面为空白。
NisseEngström2014年

这个网站确实简直是垃圾。
MD XF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.