多くの質問に対して、答えは「標準」にあるようです。しかし、それはどこにありますか?できればオンライン。
グーグルは、プログラミングフォーラムでの議論の洪水に溺れているため、特にC標準の場合は無駄に感じることがあります。
これを始めるために、これらは私が今探しているものなので、どこに良いオンラインリソースがありますか:
- C89
- C99
- C11
- C ++ 98
- C ++ 03
- C ++ 11
- C ++ 14
- C ++ 17
2014 年 9 月 1 日から 2021 年 9 月の時点で、PDF 形式の公式の C および C++ 標準ドキュメントの価格別の最適な場所は次のようです。
C++20 – ISO/IEC 14882:2020: iso.org から 198 スイス フラン (約 217 米ドル)
C++17 – ISO/IEC 14882:2017: Standards New Zealand から $90 NZD (約 $65 US)
C++14 – ISO/IEC 14882:2014: Standards New Zealand から $90 NZD (約 $65 US)
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: Standards New Zealand から $80 NZD (約 $60 US)
C17/C18 – INCITS/ISO/IEC 9899:2018: 2017 年 11 月の INCITS/ANSI / N2176 / c17_updated_proposed_fdis.pdf ドラフトから116 ドル(リンク切れ、Wayback Machine N2176を参照)
C11 – ISO/IEC 9899:2011: 30ドル ansi.org から 60 ドル/ WG14 ドラフト バージョン N1570
C99 – INCITS/ISO/IEC 9899-1999(R2005): $60 from ansi.org / WG14 ドラフト バージョン N1256
C90 – ISO/IEC 9899:1990: Standards New Zealand から $90 NZD (約 $65 USD)
警告: 標準ドラフトのほとんどのコピーは PDF 形式で公開されており、テキスト/HTML が PDF から転記または自動生成された場合、エラーが発生する可能性があります。
(C++11 ワーキング ドラフトのプレーン テキスト バージョンをホストしているサイトには、この形式の C++14 ドラフトもいくつかあります。ただし、最終的なワーキング ドラフト N4140 のコピーはありません。)
標準の印刷版は、国の標準化団体およびISOから入手できますが、非常に高価です。
C90 標準のハードコピーが上記よりもはるかに安い価格で必要な場合は、 Herb Schildtの本The Annotated ANSI Standard at Amazonの安価な中古コピーを見つけることができるかもしれません。これには、標準の実際のテキストが含まれています (便利です)。標準に関する解説 (あまり役に立たない - 危険で誤解を招くエラーがいくつか含まれています)。
C99 および C++03 標準は、Wiley および BSI (British Standards Institute) から書籍形式で入手できます。
将来の規格の作業草案は、多くの場合、委員会の Web サイトから入手できます。
現在またはそれ以前の 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) に少なくとも 1 つのテキストの違いがあります。 , ここで、「リスト」は「中括弧で囲まれたリスト」になりました. 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 の Web サイトには TC2 の PDF リンクはありません。
ISO/IEC 9899:1999 (3 つの技術正誤表をすべて組み込んだ 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 の 2 つのワーキング ドラフトが後にありましたが、これらは WG14 の Web サイトから削除されたようです。
C89/C90 と C99 の間の変更点のリスト: http://port70.net/~nsz/c/c89/c9x_changes.html
C99 の TC1 (TC のみであり、TC を組み込んだ標準ではありません): http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/n32071.PDF
C99 の TC2 (TC のみであり、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
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)
C2x 作業中 - 2020 年 10 月 18 日現在の最新のワーキング ドラフト (N2731): http://www.open-std.org/JTC1/SC22/WG14/www/docs/n2731.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 (Final Committee Draft) バージョンはパスワードで保護されています。それらを取得するには、標準化委員会に参加する必要があります。
ドラフト バージョンは標準の最終的な承認済みバージョンに非常に近いかもしれませんが、この投稿の編集者の中には、実際のドキュメントのコピーを入手することを強くお勧めする人もいます。特に、参照として引用する予定がある場合はそうです。もちろん、飢えている学生は、現金に縛られている場合は、先に進んでドラフトを使用する必要があります.
規格の批准後数か月待つことができる場合は、規格を探す際に「ISO/IEC」ではなく「INCITS/ISO/IEC」を検索することが鍵となるようです。そうすることで、この記事の編集者の 1 人は、C11 および C++11 標準を手頃な価格で見つけることができました。たとえば、webstore.ansi.orgで「ISO/IEC 9899:2011」ではなく「INCITS/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標準( IEEE 1003.1) では、準拠するオペレーティング システムに C コンパイラを含める必要があります。このコンパイラは、C 標準に準拠している必要があり、POSIX の「システム インターフェイス」セクションで定義されているさまざまな拡張 (off_t
データ型、<aio.h>
ヘッダー、clock_gettime()
関数、_POSIX_C_SOURCE
マクロなど) もサポートする必要があります。
したがって、特定の関数を調べようとしたときに、「この関数は C 標準ではなく POSIX の一部です」と通知され、オペレーティング システムの標準がコンパイラ機能と言語拡張を義務付けている理由を疑問に思ったことがあると思います。
POSIX.1-2001: システム インターフェイス セクションは、https://mirror.math.princeton.edu/pub/oldlinux/download/c951.pdfから別のドキュメントとしてダウンロードできます。セクション 1.7 は、C 標準の関連バージョンが C99 であると述べています。
「シェルとユーティリティ」セクション ( https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf ) では、C99 準拠のコンパイラが存在する必要があるだけでなく、 「c99」という名前のコマンドライン。これを実装する方法の 1 つは、"c99" というシェル スクリプトを /usr/bin に配置することです。このスクリプトは-std=c99
、コマンド ライン パラメータのリストにオプションを追加して gcc を呼び出し、競合する標準が指定されるのをブロックします。
POSIX.1-2001 には 2 つの技術正誤表があり、1 つは 2002 日付、もう 1 つは 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には、2 番目のペイウォール リンクもあります。
http://www.open-std.org/jtc1/sc22/open/n4217.pdfに POSIX.1-2008 のドラフト バージョンがあります。
POSIX.1-2008 にも 2 つの技術的な正誤表があり、後者は 2016 年のものです。正誤表を組み込んだ標準のオンライン HTML バージョンがhttps://pubs.opengroup.org/onlinepubs/9699919799.2016edition/にあります。 、繰り返しになりますが、サイトの検索ボックスが情報を見つけるのに適していない状況がありました。
https://pubs.opengroup.org/onlinepubs/9699919799/に POSIX.1-2017 のオンライン HTML バージョンがあります- ただし、そのサイトの検索ボックスの代わりに Google を使用することをお勧めします。Open Groupの Web サイトによると、「IEEE 1003.1-2017 ... は 1003.1-2008 標準の改訂版であり、2 つの技術的正誤表 (現状のまま) を含む標準をロールアップするためのものです」。Linux のマンページでは、技術正誤表 1 および 2 が適用された POSIX.1-2008 と「技術的に同一」であると説明されています。_POSIX_C_SOURCE
したがって、これはメジャー リビジョンではなく、マクロの値を変更しません。
標準のオンライン バージョンは次の場所にあります。
以下の規格のすべてのドラフト バージョン:
以下はすべて無料でダウンロードできます
2021
日
: N4892 2021年 3月17
日
: N4885
これは C++20 標準です:
このバージョンでは認証が必要
です 2020-04-08: N4860
以下の標準のすべてのドラフト バージョン:
以下はすべて無料でダウンロードできます
(これらの多くは、このメイン 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
以下の標準のすべて
のドラフトバージョン:以下はすべて
無料で
ダウンロードでき
ます
。-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 Standard 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
以下の規格のすべて の草稿バージョン
:以下はすべて
無料
でダウンロードでき
ます
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 年 8 月 6 日: N2369
2007 年
6 月25 日: N2315 2007 年
5月 7 日
: N2284 2006 年 11 月 3 日
: N2134 2006
年4 月 21 日
: N2009 -04-27: N1804
これは古いC ++03 標準です:以下の
すべて
のバージョン
で
認証が必要
です-13: N1316ドラフト拡張技術正誤
表 1997-00-00: N1117 ドラフト拡張技術正誤表
以下の標準のすべての草案バージョン: 以下は
すべて無料でダウンロード可能
です
。
2022 / 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 から書籍形式で入手できます。
さらに、すでに述べたように、将来の標準のワーキング ドラフトは、多くの場合、委員会の Web サイトから入手できます。
ANSI C 標準(別名 C.89)のドラフトのテキストは、オンラインで入手できます。これは、ISO C 標準 (C.90) によって受け入れられる前に ANSI 委員会によって標準化されたため、セクションの番号付けは異なります (ANSI セクション 2 から 4 は、ISO セクション 5 から 7 にほぼ対応しています)。である) ほぼ同一。
ISO C および C++ 標準は非常に高価です。一方、INCITS はそれらをはるかに安い価格で再発行しています。http://www.techstreet.com/には 30 ドルで PDF があるようです (INCITS/ISO/IEC 14882:2003 を検索してください)。
ハードコピー版もあります。Wiley が発行する英国規格協会のバージョンを探してください。
実際の標準文書は、あまり役に立たないかもしれません。ほとんどのコンパイラは標準を完全に実装しておらず、実際には競合する場合があります。そのため、すでに持っているコンパイラのドキュメントがより役に立ちます。さらに、ドキュメントには、プラットフォーム固有の注意事項と注意事項が含まれます。
実際の標準ではありませんが、ISO C (C89/90) には、C94/95 と呼ばれる修正版 (Normative Addendum 1) があります。これは C99 に統合されましたが、Clang-std=c94
などの一部のコンパイラではコマンド ラインで指定できます。ISO/IEC 9899:1990/Amd 1:1995 は、SAI GLOBAL (PDF またはハード コピー) から高額で購入できます。
ドキュメントの概要は、ここで確認できます。
1990 年に ANSI C 規格 (当時のドラフト) が国際規格の採用を検討されていたとき、国際化の問題に対処していないという理由で、いくつかの反対意見がありました。規格はすでに数年かけて作成されていたため、基礎を提供するためにいくつかの変更が行われることが合意されました (たとえば、7.10.7 節の機能が追加されました)。標準の適切な国際化。この作業は、規範補遺 1 で最高潮に達しました。
規範的補遺 1 は、国際文字セットの制限と約束の両方に対する C の反応を体現しています。ダイグラフとヘッダーは、たとえば { または } 文字を使用せずに、ISO 646 の各国語版で記述された C プログラムの外観を改善することを目的としていました。対極にある機能は、古い標準のほとんど適切な基盤に接続され、ワイド文字とマルチバイト文字列を処理するための完全で一貫したユーティリティ セットに拡張されます。
この文書は、規範的補遺 1 を要約したものです。この文書は、既に規格に精通している読者に迅速に通知することを目的としています。NA1 の背後にある複雑な主題を紹介することはできませんし、できないし、リファレンス マニュアルとして元のドキュメントを置き換えることもできません。(とはいえ、可能な限り正確であるように努めており、作者は間違いや脱落について知りたいと思っています。)