Loading AI tools
ウィキペディアから
ANSI C、ISO C、または標準Cとは、米国規格協会 (ANSI) および国際標準化機構 (ISO) が発行したC言語の標準の総称である。歴史的にこれらの名前は特に、オリジナルであり、最もサポートされているバージョンであるC89およびC90のことを指す。C言語でプログラムを作成するソフトウェア開発者は、コンパイラ間の移植性のために、標準に準拠することが推奨される。
Cの最初の標準はANSIによって発行された。この文書は後にISOによって採択され、ISOによって公表されたその後の改訂版もANSIによって採択されているが、「ISO C」ではなく「ANSI C」という名称がより広く使用されている。一部のソフトウェア開発者は「ISO C」という用語を使用しているが、他のソフトウェア開発者は発行組織に中立的な「標準C」という用語を使用している。
1983年、ANSIがC言語の標準仕様を確立するための委員会・X3J11を設立した。この規格は1989年に完成し、ANSI X3.159-1989「プログラミング言語C」として採択された。このバージョンは、しばしば「ANSI C」と呼ばれる。その後、C99が発表されてからは、それ以前のバージョンについても同様の命名法で呼ばれるようになり、このバージョンは「C89」とも呼ばれるようになった。
C89のフォーマットを変更しただけ[1]の標準が、ISOによってISO/IEC 9899:1990として採択された。この標準はC90と呼ばれることがある。C89とC90は本質的には同じ言語である。
1995年、ISOはANSI-C標準の拡張、Amendment 1を発行した。正式名称はISO/IEC 9899/AMD1:1995であり、C95というニックネームを付けた。誤りの訂正の他、以下のような言語の能力のさらなる変更があった[4][5]。
wchar.h
と wctype.h
およびI/Oの導入による、標準ライブラリでのマルチバイト文字およびワイド文字対応の改善&&
→and
など)__STDC_VERSION__
の仕様化この改訂に加えて、2つのC90の正誤表がISOによって発行された。
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L
/* C95 compatible source code. */
#elif defined(__ANSI__)
/* C89 compatible source code. */
#endif
2000年3月、ANSIはISO/IEC 9899:1999を採択した。この規格は、一般に「C99」と呼ばれている。この標準での注目すべき追加点は、以下の通りである。
long long
、_Bool
、_Complex
、_Imaginary
静的配列インデックス、指定初期化子、複合リテラル、可変長配列、フレキシブル配列メンバ、可変長マクロ、restrict
キーワードなどの、新しいコア言語機能
stdint.h
、tgmath.h
、fenv.h
, complex.h
などの新しいライブラリヘッダint
など、いくつかの危険なC89言語機能を削除3つのC99の正誤表がISOによって発行された。
gets
を非推奨とした2011年12月8日にISO/IEC 9899:2011(通称 C11)として改訂された。このバージョンで導入された注目すべき機能には、改良されたUnicode対応、新しい _Generic
キーワードを使用するタイプジェネリック式、クロスプラットフォームのマルチスレッドAPI (<threads.h>
)、コア言語とライブラリ (<stdatomic.h>
) の両方でのアトミック型対応がある。
1つのC11の正誤表がISOによって発行された。
2018年にISO/IEC 9899:2018(通称C17またはC18)として改訂された。仕様の欠陥修正がメインのマイナーアップデートである[9]。
ISOは、標準化プロセスの一環として、C言語に関連する技術レポート (technical report) と仕様書 (specification) も公開している。
TS 18661の5番目と最後の部分、ソフトウェアトランザクショナルメモリ仕様、ライブラリ拡張などの多くの技術仕様が開発中で承認待ちである[21]。
ANSI Cは現在広く使用されているほとんどのコンパイラが対応している。現時点で書かれているC言語のソースコードのほとんどは、ANSI Cをベースにしている。標準Cで書かれ、ハードウェアに依存する仮定を持たないプログラムは、準拠したC実装のプラットフォームで正しくコンパイルされることが保証されている。このような予防措置を講じないと、ほとんどのプログラムはGUIライブラリなどの非標準ライブラリの使用やコンパイラ固有の属性やプラットフォーム固有の属性の使用などにより、特定のプラットフォームまたは特定のコンパイラでしかコンパイルされないことになる(特定のデータ型の正確なサイズやエンディアンなど)。
K&R CとANSI Cの違いを緩和するために、__STDC__
マクロを使用してコードをANSIセクションとK&Rセクションに分割することができる。
#if defined(__STDC__) && __STDC__
extern int getopt(int, char * const *, const char *);
#else
extern int getopt();
#endif
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.