前回確認したところ、ANSI C でコーディングしているということは、「これは C99 準拠のコードで他に何も含まれていない」ということと同じでした。C11 と C++11 では、この違いはまだ残っていますか? それでも何か意味があるのでしょうか?
3 に答える
歴史的に、「ANSI C」は「標準 C」、つまり C89 を意味するために使用されていましたが、「K&R C」や、コンパイラ作成者によって発明されたさまざまな標準化前のバリアントとは対照的です。というわけで第2版。「The C Programming Language」の表紙には大きな赤い「ANSI C」のスタンプがあります。
それからしばらくの間、「ANSI C」とは対照的に、「ISO C」は「新しい標準 C」、つまり C99 を意味するために使用されました。
ISO と ANSI の両方が C89 と C99 の両方を批准しているため、これは常に紛らわしい使用法でした。ISO は前者を C90 として批准し、ANSI のバージョンからいくつかのレイアウトを変更して公開しましたが、実質的な内容は同じであると思われます。したがって、「ANSI C」は常に ISO 標準であり、「ISO C」は常に ANSI 標準でした。唯一の違いは、標準化プロセスを監督する機関でした。
この使用法に従って (そしておそらく継続することをお勧めします)、-ansi
GCC へのフラグは と同等-std=c90
です。その文脈では、実際には「C90に加えて、標準と競合しないいくつかのGNU拡張機能」を意味します。
C99 を指す「ANSI C」については知りませんが、その意味で使用されていないわけではありません。
過去 10 年間、「ANSI C」という用語を使用することは、誰の助けにもならなかったと思います。ANSI は C11 を批准しました。確かに C11 が現在の ANSI C 標準であると言えますが、「ANSI C」という用語は、人々が C11 を意味することを明確に理解するという合理的な期待を持って使用することはできません。
ISO C11 と ISO C++11 の両方が、新しい ANSI C および C++ 標準として承認されました。
たとえば、C11 の私の ANSI コピーには次のように書かれています。
INCITS (InterNational Committee for Information Technology Standards) によって米国国家標準として採用されました。ANSI 承認日: 2012 年 5 月 23 日
現在、C 標準の1 3 の異なるリビジョンと C++ の "2.5" のリビジョンが広く使用されているため、今日のこのような用語はこれまで以上に意味をなさないと言えます。
- 実際には、ある時点で「現在の」C (C++) 標準は 1 つしかありません。最後の標準は、以前のバージョンに取って代わるためです。ここで私が言いたいのは、これらの以前のバージョンはすべて依然として非常に関連性があるということです (多くの場合、最新のリビジョンよりも重要です)。