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

Where do I find the current C or C++ standard documents?

提问人: 提问时间:9/17/2008 最后编辑:9 revs, 7 users 42%Christoffer 更新时间:9/23/2023 访问量:175755

问:

这个问题的答案是社区的努力。编辑现有答案以改进此帖子。它目前不接受新的答案或交互。

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

谷歌搜索有时会让人觉得徒劳无功,尤其是对于 C 标准,因为它们被淹没在编程论坛上的大量讨论中。

首先,由于这些是我现在正在寻找的资源,因此哪里有很好的在线资源:

  • C89型
  • C99型
  • C11型
  • C++98
  • C++03
  • C++11
  • C++14
  • C++17
C C 标准 C++-FAQ

评论

4赞 Jonathan Leffler 9/1/2014
请注意有关 MSO 的讨论。这个问题的答案对 C 和 C++ 程序员很有价值;它应该保持开放状态(尤其是因为有一个 C++2014 标准可以添加到答案中,一旦它发布——它已经被批准)。

答:

11赞 Pieter #1

ISO 标准需要花钱,从适度的金额(对于 PDF 版本)到更多(对于书籍版本)。

然而,虽然它们尚未最终确定,但通常可以在网上找到草稿。大多数时候,最终版本与上一稿没有太大区别,所以虽然不完美,但它们会很适合。

3赞 MSalters #2

ISO C 和 C++ 标准非常昂贵。另一方面,INCITS 以更低的价格重新发布它们。http://www.techstreet.com/ 似乎有 30 美元的 PDF (搜索 INCITS/ISO/IEC 14882:2003)。

也提供硬拷贝版本。查找由 Wiley 发布的英国标准协会版本。

评论

0赞 Keith Thompson 12/10/2011
目前,techstreet.com 拥有 PDF 格式的 C++2003 标准,售价 30 美元,C++2011 标准售价 403 美元。
12赞 James Hopkin #3

您可能会发现 C++0x 的国际标准草案很有用。

评论

0赞 4/15/2010
FCD 现已上市
6赞 Anthony Williams #4

C99 和 C++03 标准以书籍形式从 Wiley 获得:

此外,如前所述,未来标准的工作草案通常可从委员会网站上获得:

C-201x草案为N1336,C++0x草案为N3225

562赞 78 revs, 22 users 32%AJM #5

标准的PDF版本

截至 2014 年 9 月 1 日至 2022 年 3 月,PDF 中官方 C 和 C++ 标准文档按价格计算的最佳位置似乎是:

标准的非PDF电子版本

警告:大多数标准草稿的副本都以 PDF 格式发布,如果文本/HTML 是从 PDF 转录或自动生成的,则可能会引入错误。

(托管 C++11 工作草案纯文本版本的网站也有一些这种格式的 C++14 草案。但它们都不是最终工作草案 N4140 的副本。

标准的打印版本

标准的印刷副本可从国家标准机构和 ISO 获得,但非常昂贵。

如果您想要以比上述便宜得多的价格获得 C90 标准的硬拷贝,您可以在亚马逊上找到 Herb Schildt 的《带注释的 ANSI 标准》一书的廉价二手副本,其中包含标准的实际文本(有用)和标准注释(不太有用 - 它包含一些危险和误导性错误)。

C99 和 C++03 标准可从 Wiley 和 BSI(英国标准协会)以书籍形式获得:

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

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

如果您想从当前或更早的 C/C++ 标准中获取草稿,互联网上有一些免费提供:

对于 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 版本。

POSIX 对 C 标准的扩展

POSIX 标准 (IEEE 1003.1) 要求兼容的操作系统包含 C 编译器。反过来,此编译器必须符合 C 标准,并且还必须支持 POSIX 的“系统接口”部分中定义的各种扩展(例如数据类型、标头、函数和宏)。off_t<aio.h>clock_gettime()_POSIX_C_SOURCE

因此,如果你试图查找一个特定的函数,被告知“这个函数是 POSIX 的一部分,而不是 C 标准”,并想知道为什么操作系统标准强制要求编译器功能和语言扩展......现在你知道了!

评论

65赞 sbi 2/3/2011
希尔德的书的问题在于,他的评论严重贬低了他所评论的标准。
63赞 Wiz 6/3/2011
非常糟糕的书推荐(Herb Schildt's),看这个: lysator.liu.se/c/schildt.html
11赞 Michael Burr 6/3/2011
我知道这篇评论——我提到这本书只是作为一种非常便宜地获得标准的可能方法。但我想人们也应该知道这篇评论。如果你想要便宜的标准硬拷贝,我建议忽略这本书的注释部分(这就是我所做的)。
46赞 Keith Thompson 12/10/2011
希尔德的书(我认为已经绝版)比实际标准的印刷版便宜得多。有人认为,价格差异反映了注释的价值。本书的每份副本都应附有 Clive D.W. Feather 的 The Annotated Annotated C Standard 的打印件。(请注意,希尔德的书中缺少一些介绍性材料。
14赞 Shahbaz 6/14/2012
@MichaelBurr,所有标准都可以在 www.open-std.org 中找到免费,既然您有公认的答案,那么将链接更改为免费链接怎么样?
64赞 Frederico #6

C99 可在线获取。引自 www.open-std.org

该标准的最新公开版本是 组合 C99 + TC1 + TC2 + TC3,WG14 N1256,日期为 2007-09-07。这是 WG14 工作文件,但它反映了 发行时间。

2赞 Kris Kumler #7

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

评论

24赞 Spidey 7/5/2012
编译器文档很重要,但了解语言比了解实现更重要。
2赞 hdante 3/1/2013
使用实际的标准,您可以找到编译器中的错误,并通过修补它们、提交错误报告或简单地进入 IRC 房间并与可以修复它的人交谈来帮助他们更好地遵循标准。
3赞 Kris Kumler 3/1/2013
@hdante -- 当然。当您将标准本身作为理想时,您可以要求供应商提供兼容性。@/all -- 这里的意图并不是说标准没有用(仅供参考,首先从标准开始是我过去采取的方法),而是你也必须知道你的现实世界的起点,希望这符合标准。
7赞 SamB 3/25/2015
无论如何,编译器文档往往会遗漏标准中涵盖的内容。
466赞 71 revs, 14 users 75%Martin York #8

该标准的在线版本如下:

工作草案,编程语言 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

评论

1赞 Shahbaz 6/14/2012
您可能想提及链接将您带到什么标准!同时添加 C11 标准:open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
25赞 Lundin 10/25/2013
+1 表示保持一个比 ISO 第 21 工作组更新的列表。
5赞 pepr 11/15/2013
+1 为列表;只是为了补充所有草稿都可作为 Git 存储库 github.com/cplusplus/draft 使用。您可以将链接添加到 isocpp.org/std/the-standard
1赞 Martin York 5/17/2016
@k-five:Sombody似乎在github上发布了一个版本:github.com/cplusplus/draft/blob/master/papers/n4140.pdf
1赞 Justin Time - Reinstate Monica 12/5/2016
@LokiAstari 链接到工作草案的 HTML 版本,例如 timsong-cpp.github.io/cppwp(不确定哪个草案,似乎是最新的)或 n3337 是否有帮助?
26赞 4 revs, 2 users 87%user1055604 #9

草稿链接:

C++11(+编辑修复):N3337 HTMLPDF

C++14(+编辑修复):N4140 HTMLPDF

C11 N1570文本)

货号:C99 N1256

该标准的草案在批准和发布之前分发征求意见。

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

评论

0赞 Gareth McCaughan 11/13/2012
“N1169”链接指向一个四页的文档,其中包含一些缺陷报告。它在任何意义上都不是 C++(或任何其他)标准的草案。
7赞 4 revsjxh #10

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

评论

0赞 Cubbi 8/17/2013
这真的是最后一稿吗?我知道的一个区别是,该草案将tm_sec的范围指定为 ,而 C90(不正确)[0, 60][0, 61]
0赞 SamB 3/25/2015
@Cubbi:他确实说过这是ANSI标准的最后一稿。听起来 ISO WG 中的某个人感到困惑,并认为一年中可能出现的两个闰秒也可能在同一分钟内/之后发生......或者他们从 POSIX 那里得到了错误,他们没有说他们从哪里得到它,只是他们修复了它以与 C99 保持一致。
0赞 veganaiZe 6/20/2018
K&R 第 2 版(ANSI C)并非基于实际的最终标准,但确实指定了 .我认为这是闰秒,是有道理的。tm_sec(0, 61)
0赞 Keith Thompson 11/8/2018
@veganaiZe 范围为 [0, 60] 以允许闰秒(否则为 [0, 59])。[0, 61] 是一个错误,这意味着在同一分钟内可能有两个闰秒(事实并非如此)。
0赞 AJM 5/7/2021
C89 和 C90 之间至少有一个显着的区别。在第 6.5.7 节(以前称为 3.5.7)中,C90 中的“列表”变为“大括号括起来的列表”。
1赞 user3920237 #11

虽然不是实际标准,但对 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背后的复杂主题, 它也不能取代原始文件作为参考手册。 (尽管如此,它试图尽可能准确,其作者 想听听任何错误或遗漏。

评论

0赞 AJM 4/12/2021
SAI Global 链接不再有效。我已经检查了 archive.org,它确实一次重定向 - 基于此,我认为 infostore.saiglobal.com/en-gb/standards/... 是购买 NA1 的新 URL。