「C89」はこの項目へ転送されています。89回目のコミックマーケットについては「コミックマーケット」をご覧ください。
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は本質的には同じ言語である。 この標準は後に、ANSI/INCITS[2]、ISO/IEC[3]の双方によって撤回されている。 1995年、ISOはANSI-C標準の拡張、Amendment 1を発行した。正式名称はISO/IEC 9899/AMD1:1995であり、C95というニックネームを付けた。誤りの訂正の他、以下のような言語の能力のさらなる変更があった[4][5]。 この改訂に加えて、2つのC90の正誤表がISOによって発行された。 2000年3月、ANSIはISO/IEC 9899:1999を採択した。この規格は、一般に「C99」と呼ばれている。この標準での注目すべき追加点は、以下の通りである。 静的配列インデックス、指定初期化子、複合リテラル、可変長配列、フレキシブル配列メンバ
歴史と概要
C89
C90
C95
wchar.h と wctype.h およびI/Oの導入による、標準ライブラリでのマルチバイト文字およびワイド文字対応の改善
言語へのダイグラフの追加
演算子の代替仕様のための標準マクロの仕様化(&&→andなど)
標準マクロ __STDC_VERSION__ の仕様化
ISO/IEC 9899 TCOR1(1995年)
ISO/IEC 9899 TCOR2(1996年)
C95互換性を確認するプリプロセッサテスト#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L/* C95 compatible source code. */#elif defined(__ANSI__)/* C89 compatible source code. */#endif
C99詳細は「C99」を参照
新しい組み込みデータ型: long long、_Bool、_Complex、_Imaginary
stdint.h、tgmath.h、fenv.h, complex.h などの新しいライブラリヘッダ
インライン関数、一行コメント、宣言とコードのミックス、ユニバーサルキャラクタ名などの、C++機能との互換性の向上
暗黙的な関数宣言や暗黙の int など、いくつかの危険なC89言語機能を削除
3つのC99の正誤表がISOによって発行された。
ISO/IEC 9899:1999/Cor.1:2001(E)
ISO/IEC 9899:1999/Cor.2:2004(E)
ISO/IEC 9899:1999/Cor.3:2007(E) - 標準ライブラリ関数 gets を非推奨とした
この規格は、後述のC11のリリースをもって、@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}???[誰?][6]とISO/IEC[7]の双方によって廃止された。
C11詳細は「C11 (C言語)」を参照
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) も公開している。
ISO/IEC 9899:2011/Cor 1:2012[8]
C17
その他の関連するISO発行物
ISO/IEC TR 19769:2004[10] - Unicode変換フォーマットに対応するライブラリ拡張について。C11に統合
ISO/IEC TR 24731-1:2007[11] - 境界チェックされたインタフェースに対応するライブラリ拡張について。C11に統合
ISO/IEC TR 18037:2008[12] - 組み込みプロセッサをサポートするためのC拡張について
ISO/IEC TR 24732:2009[13] - ISO/IEC TS 18661-2:2015に代わる十進浮動小数点
ISO/IEC TR 24747:2009[14] - 特殊な数学関数について
ISO/IEC TR 24731-2:2010[15] - 動的割り当て機能に対応するライブラリ拡張について
ISO/IEC TS 17961:2013[16] - Cの安全なコーディングについて
ISO/IEC TS 18661-1:2014[17] - IEC 60559:2011に準拠した二進浮動小数点演算
ISO/IEC TS 18661-2:2015[18] - IEC 60559:2011と互換性のある十進浮動小数点演算
ISO/IEC TS 18661-3:2015[19] - IEC 60559:2011互換のインターチェンジおよび拡張浮動小数点型
ISO/IEC TS 18661-4:2015[20] - IEC 60559:2011に準拠した補助機能
TS 18661の5番目と最後の部分、ソフトウェアトランザクショナルメモリ仕様、ライブラリ拡張などの多くの技術仕様が開発中で承認待ちである[21]。 ANSI Cは現在広く使用されているほとんどのコンパイラが対応している。現時点で書かれているC言語のソースコードのほとんどは、ANSI Cをベースにしている。標準Cで書かれ、ハードウェアに依存する仮定を持たないプログラムは、準拠したC実装のプラットフォームで正しくコンパイルされることが保証されている。このような予防措置を講じないと、ほとんどのプログラムはGUIライブラリなどの非標準ライブラリの使用やコンパイラ固有の属性やプラットフォーム固有の属性の使用などにより、特定のプラットフォームまたは特定のコンパイラでしかコンパイルされないことになる(特定のデータ型の正確なサイズやエンディアンなど)。 K&R C
主要なコンパイラによる対応
ANSI Cに対応するコンパイラ
アムステルダム・コンパイラ・キット(英語版
表
話
編
歴
C言語
K&R
ANSI C
C89
C90
C99
C11
C17(英語版)
C2x(英語版)
Embedded C(英語版)
MISRA C
Cの機能
関数
ヘッダファイル
演算子
文字列(英語版)
文法(英語版)
プリプロセッサ(英語版)
データ型(英語版)
キーワード
フリースタンディング環境
標準Cライブラリの関数