[解決済み] 現在のCまたはC++の標準文書はどこにありますか?
質問内容
多くの質問に対して、答えは「標準」にあるようです。しかし、それはどこにあるのでしょうか?できればオンラインで。
特にC言語の標準は、プログラミングフォーラムでの議論の洪水に埋もれてしまうので、ググっても無駄だと感じることがあります。
まず始めに、私が今探しているのはこのようなものなので、オンラインでよい資料はどこにあるのでしょうか。
- C89
- C99
- C11
- C++98
- C++03
- C++11
- C++14
- C++17
解決方法は?
PDF版規格書
現在 <ストライク 2014年9月1日 2021年9月、CとC++の公式標準文書をPDFで入手できる価格別のベストロケーションは以下のようです。
-
C++20 - ISO/IEC 14882:2020: 198スイスフラン(約217米ドル)iso.orgより。
-
C++17 - ISO/iec 14882:2017: 90 NZD (約65 USドル) (Standards New Zealandより
-
C++14 - ISO/IEC 14882:2014: スタンダード・ニュージーランドより$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: 80 NZD (約60 USドル) スタンダード・ニュージーランド社製
-
C17/C18 - incits/iso/iec 9899:2018: INCITS/ANSIより116ドル / 2017年11月のN2176 / c17_updated_proposed_fdis.pdf 原案 (リンク切れ、参照 ウェイバックマシン N2176 )
-
C11 - ISO/iec 9899:2011:
$3060ドル(ansi.orgより / WG14ドラフト版N1570 -
C99 - incits/iso/iec 9899-1999(r2005): ansi.orgより$60 / WG14ドラフト版 N1256
-
C90 - ISO/iec 9899:1990: スタンダード・ニュージーランドより90NZドル(約65USドル
非PDF電子版規格書
警告: 標準ドラフトのコピーのほとんどはPDF形式で公開されており、テキスト/HTMLがPDFから転写または自動生成された場合、エラーが発生する可能性があります。
- C89 - ドラフト版(ANSIテキスト形式): ( https://web.archive.org/web/20161223125339/http://flash-gordon.me.uk/ansi.c.txt )
- C89 - HTMLドキュメントとしてのドラフト版: ( http://port70.net/~nsz/c/c89/c89-draft.html )
- C90 TC1; ISO/IEC 9899 TCOR1、単一ページのHTML文書: ( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm )
- C90 TC2; ISO/IEC 9899 TCOR2、単一ページのHTML文書: ( http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm )
- C99 - ドラフト版 (N1256) をHTML文書にしたもの: ( http://port70.net/~nsz/c/c99/n1256.html )
- C11 - ドラフト版 (N1570) を HTML 文書として: ( http://port70.net/~nsz/c/c11/n1570.html )
- C++11 - 作業ドラフト (N3337) (プレーンテキスト文書): ( http://port70.net/~nsz/c/c%2B%2B/c%2B%2B11_n3337.txt )
(プレーンテキスト版の C++11 ワーキングドラフトをホストしているサイトには、この形式の C++14 ドラフトもいくつかあります)。しかし、いずれも最終作業草案である N4140 のコピーではありません)。
印刷版規格書
規格の印刷物は、各国の標準化団体や ISO しかし、非常に高価である。
上記よりもずっと安価にC90規格のハードコピーを入手したい場合は、安価な中古品として ハーブ・シルト 著書 注釈付きANSI規格 で アマゾン この本には、規格の実際のテキスト(役に立つ)と規格に関する解説(あまり役に立たない-いくつかの危険で誤解を招く誤りを含んでいる)が含まれています。
C99とC++03の規格は、WileyやBSI(英国規格協会)から書籍として販売されています。
標準化委員会ドラフト版(無料)
将来の規格のワーキングドラフトは、多くの場合、委員会のウェブサイトから入手できます。
現在または以前のC/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節)に少なくとも一つの文言上の相違があり、ここで "リスト" となった。 "a brace-enclosed list" . なお、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
-
にはTC2のPDFリンクはありません。 WG14ウェブサイト 悲しいかな。
-
ISO/IEC 9899:1999 (C99、3つの技術的正誤表をすべて含む)。 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)をご覧ください。 なお、後に2つのワーキングドラフトがあった。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
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 work-in-progress - 2020年10月18日時点の最新ワーキングドラフト(N2731)。 http://www.open-std.org/JTC1/SC22/WG14/www/docs/n2731.pdf
C++の場合。
-
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 work-in-progress. 2021年3月17日付作業草案): http://open-std.org/JTC1/SC22/WG21/docs/papers/2021/n4885.pdf
ただし、規格を決定する会議の直前のバージョンは、通常、最終的な規格の内容に非常に近くなっています。FCD (Final Committee Draft) 版はパスワードで保護されており、入手するには標準化委員会に参加する必要があります。
ドラフト版は最終的な批准版に非常に近いかもしれませんが、この記事の編集者の中には、実際のドキュメントを入手することを強く勧める人もいます。もちろん、お金に困っている学生は、ドラフトを利用すればいい。
規格が批准されてから数ヶ月待つことができるのであれば、規格を探すときに "ISO/IEC" ではなく "INCITS/ISO/IEC" で検索することが鍵となるようです。この記事の編集者の一人は、そうすることで、C11とC++11の標準規格をリーズナブルな価格で見つけることができたのです。例えば、以下のサイトで、"ISO/IEC 9899:2011"ではなく、"INCITS/ISO/IEC 9899:2011" を検索すると、C11とC++11の規格をリーズナブルに見つけることができます。 webstore.ansi.org をクリックすると、リーズナブルなPDF版が表示されます。
サイト https://wg21.link/ は、C++の現在のワーキングドラフトとドラフト標準、および委員会文書への短いURLのリンクを提供します。
- https://wg21.link/std11 - C++11
- https://wg21.link/std14 - C++14
- https://wg21.link/std17 - C++17
- https://wg21.link/std20 - C++20
- https://wg21.link/std - 現行作業部会案
規格の現在のドラフトは、LaTeXのソースとして以下のサイトで管理されています。 Github . これらのソースは、以下の方法でHTMLに変換することができます。 cxxdraft-htmlgen . 以下のサイトでは、このように生成されたHTMLページを公開しています。
- ティム・ソング 現在のワーキングドラフト - C++11 - C++14 - C++17 - C++20
- Eelis 現在のワーキングドラフト
ティム・ソング また、Networking TS と Ranges TS の HTML 版と PDF 版を作成しています。
C標準のPOSIX拡張
は
POSIX
規格(IEEE 1003.1)に準拠したオペレーティングシステムは、Cコンパイラを含むことを要求しています。このコンパイラは C 規格に準拠していなければならず、さらに POSIX の "System Interfaces" セクションで定義されているさまざまな拡張機能 (たとえば、"C.S.S.S.S.S.S.S.S.") をサポートしていなければなりません。
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 であることが述べられています。
シェルとユーティリティのセクション(quot;Shell and Utilities") https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf ) は、C99 に準拠したコンパイラが存在することだけではなく、コマンドラインから "c99" という名前で呼び出せることを義務付けています。これを実装する一つの方法は、/usr/bin に "c99" という名前のシェルスクリプトを置き、gcc を
-std=c99
オプションをコマンドラインパラメーターリストに追加し、競合する規格が指定されないようにブロックします。POSIX.1-2001には、2002年と2004年の2回、技術的な修正案がありました。それらは、上記のリンク先のドキュメントには盛り込まれていないと思います。この修正案が含まれたオンラインのHTML版は、以下のサイトにあります。 https://pubs.opengroup.org/onlinepubs/009695399/ - しかし、検索ボックスがうまくいかないことがあるので、Googleで検索するのがベストでしょう。
最初の正誤表をダウンロードするための有料リンクは次の通りです。 https://standards.ieee.org/standard/1003_1-2001-Cor1-2002.html .
また、2番目は以下の有料リンクがあります。 https://standards.ieee.org/standard/1003_1-2001-Cor2-2004.html
-
POSIX.1-2008のドラフト版は、以下のサイトにあります。 http://www.open-std.org/jtc1/sc22/open/n4217.pdf .
POSIX.1-2-2008にも2つの技術的な正誤表があり、後者は2016年付けのものである。この正誤表を取り入れたオンラインのHTML版規格は、以下のサイトにあります。 https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/ - とはいえ、やはりサイト独自の検索ボックスは情報を探すのに向いていない状況もありましたね。
-
POSIX.1-2017のオンラインHTML版は、以下のサイトにあります。 https://pubs.opengroup.org/onlinepubs/9699919799/ - ただし、このサイトの検索ボックスではなく、Googleを使うことをお勧めします。によると オープングループのホームページ IEEE 1003.1-2017 は、1003.1-2008 規格の改訂版であり、2つの技術的修正事項を含む規格を(そのまま)ロールアップしたものである。 Linuxマンページ は、技術的正誤表1および2を適用したPOSIX.1-2008と技術的に同一であると記述しています。したがって、これはメジャーリビジョンではありません。
_POSIX_C_SOURCE
マクロを使用します。
関連
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】Enterキーを押して続行する
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)