(Translated by https://www.hiragana.jp/)
ANSI C - Wikipedia コンテンツにスキップ

ANSI C

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

ANSI CISO 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によって発行はっこうされた。

  • 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

2000ねん3がつ、ANSIはISO/IEC 9899:1999を採択さいたくした。この規格きかくは、一般いっぱんに「C99」とばれている。この標準ひょうじゅんでの注目ちゅうもくすべき追加ついかてんは、以下いかとおりである。

  • あたらしいデータがた: long long_Bool_Complex_Imaginary

静的せいてき配列はいれつインデックス、指定してい初期しょきふくあいリテラル、可変長かへんちょう配列はいれつフレキシブル配列はいれつメンバ英語えいごばん可変長かへんちょうマクロ、restrict英語えいごばんキーワードなどの、あたらしいコア言語げんご機能きのう

  • stdint.htgmath.hfenv.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のリリースをもって、???[だれ?][6]とISO/IEC[7]双方そうほうによって廃止はいしされた。

2011ねん12月8にちISO/IEC 9899:2011通称つうしょう C11)として改訂かいていされた。このバージョンで導入どうにゅうされた注目ちゅうもくすべき機能きのうには、改良かいりょうされたUnicode対応たいおうあたらしい _Generic キーワードを使用しようするタイプジェネリックしき、クロスプラットフォームのマルチスレッドAPI (<threads.h>)、コア言語げんごとライブラリ (<stdatomic.h>) の両方りょうほうでのアトミックかた対応たいおうがある。

1つのC11の正誤せいごひょうがISOによって発行はっこうされた。

  • ISO/IEC 9899:2011/Cor 1:2012[8]

2018ねんISO/IEC 9899:2018通称つうしょうC17またはC18)として改訂かいていされた。仕様しよう欠陥けっかん修正しゅうせいがメインのマイナーアップデートである[9]

その関連かんれんするISO発行はっこうぶつ

[編集へんしゅう]

ISOは、標準ひょうじゅんプロセスの一環いっかんとして、C言語げんご関連かんれんする技術ぎじゅつレポート (technical report) と仕様しようしょ (specification) も公開こうかいしている。

  • 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のちがいを緩和かんわするために、__STDC__ マクロを使用しようしてコードをANSIセクションとK&Rセクションに分割ぶんかつすることができる。

 #if defined(__STDC__) && __STDC__
 extern int getopt(int, char * const *, const char *);
 #else
 extern int getopt();
 #endif

ANSI Cに対応たいおうするコンパイラ

[編集へんしゅう]

関連かんれん項目こうもく

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ Standards - Using the GNU Compiler Collection (GCC)”. 2012ねん6がつ24にち閲覧えつらん
  2. ^ http://www.techstreet.com/cgi-bin/detail?doc_no=incits_iso_iec%7C9899;product_id=232462
  3. ^ ISO/IEC 9899:1990 - Programming Languages -- C”. 2012ねん6がつ24にち閲覧えつらん
  4. ^ Clive D.W. Feather (2010ねん9がつ12にち). “A brief description of Normative Addendum 1”. 2017ねん8がつ1にち閲覧えつらん
  5. ^ ISO/IEC 9899:1990/Amd 1:1995”. International Organization for Standardization (2013ねん3がつ22にち). 2017ねん8がつ1にち閲覧えつらん
  6. ^ INCITS/ISO/IEC 9899-2012”. ANSI. 2017ねん8がつ1にち閲覧えつらん
  7. ^ ISO/IEC 9899:1999 - Programming Languages -- C”. 2012ねん6がつ24にち閲覧えつらん
  8. ^ ISO/IEC 9899:2011/Cor 1:2012”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  9. ^ C の歴史れきし - cppreference.com
  10. ^ ISO/IEC TR 19769:2004”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  11. ^ ISO/IEC TR 24731-1:2007”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  12. ^ ISO/IEC TR 18037:2008”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  13. ^ ISO/IEC TR 24732:2009”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  14. ^ ISO/IEC TR 24747:2009”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  15. ^ ISO/IEC TR 24731-2:2010”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  16. ^ ISO/IEC TS 17961:2013”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  17. ^ ISO/IEC TS 18661-1:2014”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  18. ^ ISO/IEC TS 18661-2:2015”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  19. ^ ISO/IEC TS 18661-3:2015”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  20. ^ ISO/IEC TS 18661-4:2015”. International Organization for Standardization. 2017ねん8がつ1にち閲覧えつらん
  21. ^ See a list at http://en.cppreference.com/w/c/experimental Visited 16 January 2016.
  22. ^ HP C/ANSI C developer's bundle”. 2015ねん7がつ12にち閲覧えつらん
  23. ^ Support for ISO C11 added to IBM XL C/C++ compilers

外部がいぶリンク

[編集へんしゅう]
  • ISO C working group
  • Draft ANSI C Standard (ANSI X3J11/88-090) (May 13, 1988), Third Public Review
  • Draft ANSI C Rationale (ANSI X3J11/88-151) (Nov 18, 1988)
  • C Information Bulletin #1 (ANSI X3J11/93-007) (May 27, 1992)
  • ANSI C Yacc grammar
  • Schreiner, Axel-Tobias. Object oriented programming with ANSI-C. Hanser. hdl:1850/8544. ISBN 3-446-17426-5 
  • ISO/IEC 9899:1999 Programming Languages -- C”. American National Standards Institute. 2017ねん8がつ1にち閲覧えつらん
  • ANSI Standards Action Vol. 36, #48”. American National Standards Institute (2005ねん12月2にち). 2017ねん8がつ1にち閲覧えつらん