![](/img/trans.png)
[英]How do I find the revision of C++ standard, where a specific requirement was removed or changed?
[英]Where do I find the current C or C++ standard documents?
對於許多問題,答案似乎可以在“標准”中找到。 然而,我們從哪里找到呢? 最好是在線的。
谷歌搜索有時會感到徒勞,尤其是對於 C 標准,因為它們淹沒在編程論壇上的大量討論中。
首先,因為這些是我現在正在搜索的,所以哪里有好的在線資源:
截至
2014 年
9 月
1 日,
2021
年
9 月,PDF 格式的官方 C 和 C++ 標准文檔的最佳價格位置似乎是:
C++20 – ISO/IEC 14882:2020: 198 CHF(約 217 美元)來自 iso.org
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:新西蘭標准 80 新西蘭元(約合 60 美元)
C17/C18 – INCITS/ISO/IEC 9899:2018: 116 美元來自 INCITS/ANSI / N2176/c17_updated_proposed_fdis.pdf 草案,2017 年 11 月(鏈接斷開,參見Wayback Machine N2176 )
C11 – ISO/IEC 9899:2011: $30 $60 from ansi.org / WG14 草案版本 N1570
C99 – INCITS/ISO/IEC 9899-1999(R2005): ansi.org/WG14草案版本 N1256 60 美元
C90 – ISO/IEC 9899:1990:新西蘭標准 90 新西蘭元(約 65 美元)
標准的印刷副本可從國家標准機構和ISO 獲得,但非常昂貴。
如果您想要一份 C90 標准的硬拷貝,但價格比上面少得多,您可以在亞馬遜找到Herb Schildt的書The Annotated ANSI Standard的廉價二手副本,其中包含標准的實際文本(有用)和對標准的評論(不太有用 - 它包含幾個危險和誤導性的錯誤)。
C99 和 C++03 標准可從 Wiley 和 BSI(英國標准協會)以書籍形式獲得:
未來標准的工作草案通常可從委員會網站獲得:
如果您想從當前或更早的 C/C++ 標准中獲取草稿,可以在 Internet 上免費獲得一些草稿:
ANSI X3.159-198 (C89):我找不到 C89 的 PDF,但它與 C90 幾乎相同。 唯一的主要區別在於樣板和部分編號,盡管有一些輕微的文本差異
ISO/IEC 9899:1990 (C90):(除了前言和章節編號外,幾乎與 ANSI X3.159-198 (C89) 相同。第 6.5.7 節(以前是 3.5.7)中至少有一處文本差異, 其中“列表”變成了“括號括起來的列表” 。請注意,在本文檔中可以看到 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
遺憾的是, WG14 網站上沒有 TC2 的 PDF 鏈接。
ISO/IEC 9899:1999(C99 包含所有三個技術勘誤表): http : //www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
僅包含 TC1 和 TC2 的早期版本的 C99: 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
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)
C2x 正在進行中 - 截至 2020 年 4 月 12 日的最新工作草案(N2596): http : //www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
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 : //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 正在進行中。工作草案日期為 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/提供指向 C++ 當前工作草案和標准草案以及委員會文件的短 URL 鏈接:
該標准的當前草案在Github上作為 LaTeX 源進行維護。 可以使用cxxdraft-htmlgen將這些源轉換為 HTML。 以下站點維護如此生成的 HTML 頁面:
Tim Song還維護生成的 HTML 和 PDF 版本的 Networking TS 和 Ranges TS。
POSIX標准 (IEEE 1003.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 和實用程序”部分 ( https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf ) 要求不僅應該存在符合 C99 的編譯器,而且應該可以從名為“c99”的命令行。 實現這一點的一種方法是在 /usr/bin 中放置一個名為“c99”的 shell 腳本,它調用 gcc 並將-std=c99
選項添加到命令行參數列表中,並阻止任何競爭標准被指定。
POSIX.1-2001 有兩份技術勘誤表,一份是 2002 年的,另一份是 2004 年的。我認為它們沒有被合並到上面鏈接的文檔中。 在https://pubs.opengroup.org/onlinepubs/009695399/ 上有一個包含勘誤表的在線 HTML 版本 - 但我應該補充一點,我在搜索框方面遇到了一些問題,因此使用 Google 搜索該網站可能是您的最好的選擇。
在https://standards.ieee.org/standard/1003_1-2001-Cor1-2002.html有一個付費鏈接可以下載第一個勘誤表。
在https://standards.ieee.org/standard/1003_1-2001-Cor2-2004.html 上還有一個付費鏈接
http://www.open-std.org/jtc1/sc22/open/n4217.pdf 上有 POSIX.1-2008 的草稿版本。
POSIX.1-2008 也有兩個技術勘誤,兩個中的后者是 2016 年的。在https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/有一個包含勘誤的標准的在線 HTML 版本 - 雖然再次,我遇到過網站自己的搜索框不適合查找信息的情況。
https://pubs.opengroup.org/onlinepubs/9699919799/ 上有 POSIX.1-2017 的在線 HTML 版本 - 不過,我再次建議使用 Google 而不是該網站的搜索框。 根據Open Group 網站的說法,“IEEE 1003.1-2017 ...是對 1003.1-2008 標准的修訂,以匯總該標准,包括其兩個技術勘誤表(原樣)”。 Linux 聯機幫助頁將其描述為與 POSIX.1-2008“技術上相同”,並應用了技術勘誤表 1 和 2。 因此,這不是主要修訂,並且不會更改_POSIX_C_SOURCE
宏的值。
可以找到該標准的在線版本:
以下是標准的所有草案版本:
以下所有內容均可免費下載
(其中許多可以在這個主要的 GitHub 鏈接中找到)
2021-03-17: N4885
2020-12-15: N4878
2020-10-18: N4868
2020-04-08: N4861
2020-01-14: N4849
2019-11-27: N4842
2019-10-08: N4835 git
2019年8月15日: N4830混帳
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
這似乎是新標准:
這些版本需要身份驗證
2017-03-21:N4660是 C++17 草案標准
以下是標准的所有草案版本:
以下所有內容均可免費下載
2017-03-21: N4659 git
2017-02-06: N4640 git
2016-11-28: N4618git
2016-07-12: N4606git
2016-05-30: N4594git
2016-03-19: N4582git
2015-11-09: N4567git
2015-05-22: N4527git
2015-04-10: N4431git
2014-11-19: N4296git
這似乎是舊的 C++14 標准:
這些版本需要身份驗證
2014-10-07:N4140git本質上是 C++14,修正了小錯誤和拼寫錯誤
2014-09-02:N4141 git標准 C++14
2014-03-02:N3937
2014-03-02:N3936 git
以下是標准的所有草案版本:
以下所有內容均可免費下載
2013-10-13: N3797git
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++
2021 / 2020 / 2019 / 2018 / 2017 / 2016 / 2015 / 2014 / 2013 / 2012 / 2011
C99可在線獲得。 引自www.open-std.org :
該標准的最新公開版本是組合 C99 + TC1 + TC2 + TC3, WG14 N1256 ,日期為 2007-09-07。 這是 WG14 工作文件,但它反映了發布時的合並標准。
您可能會發現 C++0x 的國際標准草案很有用。
ISO 標准需要花錢,從中等(對於 PDF 版本)到更多(對於書籍版本)。
然而,雖然它們還沒有最終確定,但它們通常可以在網上找到,作為草稿。 大多數情況下,最終版本與上一稿沒有太大區別,因此雖然不完美,但它們很適合。
C99 和 C++03 標准可從 Wiley 以書籍形式獲得:
另外,正如已經提到的,未來標准的工作草案通常可以從委員會網站上獲得:
ISO C 和 C++ 標准非常昂貴。 另一方面,INCITS 重新發布它們的價格要低得多。 http://www.techstreet.com/似乎有 30 美元的 PDF(搜索 INCITS/ISO/IEC 14882:2003)。
也有硬拷貝版本。 查找由 Wiley 出版的英國標准協會版本。
實際的標准文件可能不是最有用的。 大多數編譯器並沒有完全實現標准,有時可能會發生實際沖突。 因此,您已經擁有的編譯器文檔將更有用。 此外,該文檔將包含特定於平台的備注和有關任何警告的注釋。
雖然不是一個實際的標准,有一個修正案稱為C94 ISO C(C89 / 90)/ 95,或標准附錄1.它被集成到C99,盡管一些編譯器,如鏘允許你specifiy -std=c94
上的命令行。 ISO/IEC 9899:1990/Amd 1:1995 可以從SAI GLOBAL (PDF 或硬拷貝)以高價購買。
可以在此處找到該文檔的摘要。
當(當時的草案)ANSI C 標准在 1990 年被考慮采用國際標准時,有幾個反對意見,因為它沒有解決國際化問題。 由於該標准已經制定了幾年,因此同意進行一些更改以提供基礎(例如,增加了第 7.10.7 條中的功能),並將單獨開展工作以提供標准的適當國際化。 這項工作在規范性附錄 1 中達到了高潮。
規范附錄 1 體現了 C 對國際字符集的限制和承諾的反應。 有向圖和標題旨在改善用 ISO 646 的國家變體編寫的 C 程序的外觀,沒有 { 或 } 字符。 另一方面,這些工具連接到舊標准勉強足夠的基礎並將其擴展為一組完整且一致的實用程序,用於處理寬字符和多字節字符串。
本文件總結了規范性附錄 1。旨在快速通知已經熟悉該標准的讀者; 它沒有也不能介紹NA1背后的復雜主題,也不能代替原始文檔作為參考手冊。 (盡管如此,它會盡可能准確,作者希望了解任何錯誤或遺漏。)
http://c0x.coding-guidelines.com/包含C標准的基於HTML的可搜索版本。 實際上,是一個稍微修改的版本:
該網站包含N1256的修改版本。 它包括已從C99中刪除的措辭(即以刪除線的形式)和曾經出現在C99中的措辭(即以下划線的形式)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.