アイソック【ISOC】
インターネットソサエティ
ANSI C
(ISOC から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/05 10:25 UTC 版)
ナビゲーションに移動 検索に移動ANSI C、ISO C、または標準Cとは、米国規格協会 (ANSI) および国際標準化機構 (ISO) が発行したC言語の標準の総称である。歴史的にこれらの名前は特に、オリジナルであり、最もサポートされているバージョンであるC89およびC90のことを指す。C言語でプログラムを作成するソフトウェア開発者は、コンパイラ間の移植性のために、標準に準拠することが推奨される。
歴史と概要
Cの最初の標準はANSIによって発行された。この文書は後にISOによって採択され、ISOによって公表されたその後の改訂版もANSIによって採択されているが、「ISO C」ではなく「ANSI C」という名称がより広く使用されている。一部のソフトウェア開発者は「ISO C」という用語を使用しているが、他のソフトウェア開発者は発行組織に中立的な「標準C」という用語を使用している。
C89
1983年、ANSIがC言語の標準仕様を確立するための委員会・X3J11を設立した。この規格は1989年に完成し、ANSI X3.159-1989「プログラミング言語C」として採択された。このバージョンは、しばしば「ANSI C」と呼ばれる。その後、C99が発表されてからは、それ以前のバージョンについても同様の命名法で呼ばれるようになり、このバージョンは「C89」とも呼ばれるようになった。
C90
C89のフォーマットを変更しただけ[1]の標準が、ISOによってISO/IEC 9899:1990として採択された。この標準はC90と呼ばれることがある。C89とC90は本質的には同じ言語である。
この標準は後に、ANSI/INCITS[2]、ISO/IEC[3]の双方によって撤回されている。
C95
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によって発行された。
- 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
2000年3月、ANSIはISO/IEC 9899:1999を採択した。この規格は、一般に「C99」と呼ばれている。この標準での注目すべき追加点は、以下の通りである。
- 新しい組み込みデータ型:
long long
、_Bool
、_Complex
、_Imaginary
静的配列インデックス、指定初期化子、複合リテラル、可変長配列、フレキシブル配列メンバ、可変長マクロ、restrict
キーワードなどの、新しいコア言語機能
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のリリースをもって、???[誰?][6]とISO/IEC[7]の双方によって廃止された。
C11
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]
C17
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に対応するコンパイラ
- アムステルダム・コンパイラ・キット(C K&R と C89/90)
- ARM RealView
- Clang(LLVM バックエンドを使用)
- GCC(C89/90, C99, C11完全対応)
- PCC(C89, C99, C11)
- HP C/ANSI Cコンパイラ (C89, C99)[22]
- IBM XL C/C++コンパイラ (C11, starting with version 12.1)[23]
- Intel C++ Compiler
- LabWindows/CVI
- LCC
- OpenWatcom (C89/90 and some C99)
- Microsoft Visual C++ (C89/90 and some C99)
- Pelles C (C99, Windows only.)
関連項目
- CとC++の互換性
- C++17, C++14, C++11, C++03, C++98 - C++のバージョン
- C++ Technical Report 1
脚注
- ^ “Standards - Using the GNU Compiler Collection (GCC)”. 2012年6月24日閲覧。
- ^ http://www.techstreet.com/cgi-bin/detail?doc_no=incits_iso_iec%7C9899;product_id=232462
- ^ “ISO/IEC 9899:1990 - Programming Languages -- C”. 2012年6月24日閲覧。
- ^ Clive D.W. Feather (2010年9月12日). “A brief description of Normative Addendum 1”. 2017年8月1日閲覧。
- ^ “ISO/IEC 9899:1990/Amd 1:1995”. International Organization for Standardization (2013年3月22日). 2017年8月1日閲覧。
- ^ “INCITS/ISO/IEC 9899-2012”. ANSI. 2017年8月1日閲覧。
- ^ “ISO/IEC 9899:1999 - Programming Languages -- C”. 2012年6月24日閲覧。
- ^ “ISO/IEC 9899:2011/Cor 1:2012”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ C の歴史 - cppreference.com
- ^ “ISO/IEC TR 19769:2004”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TR 24731-1:2007”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TR 18037:2008”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TR 24732:2009”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TR 24747:2009”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TR 24731-2:2010”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TS 17961:2013”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TS 18661-1:2014”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TS 18661-2:2015”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TS 18661-3:2015”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ “ISO/IEC TS 18661-4:2015”. International Organization for Standardization. 2017年8月1日閲覧。
- ^ See a list at http://en.cppreference.com/w/c/experimental Visited 16 January 2016.
- ^ “HP C/ANSI C developer's bundle”. 2015年7月12日閲覧。
- ^ 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. 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日閲覧。
インターネットソサエティ
![]() | |
略称 | ISOC |
---|---|
設立 | 1992年 |
種類 | 非営利 |
目的 | リーダーシップ |
本部 |
![]() ![]() |
貢献地域 | 全世界 |
会員数 | 50,000人 |
加盟 | Public Interest Registry |
ウェブサイト |
www |
インターネット |
---|
![]() |
インターネットソサエティ[2](ISOC、アイソック)は、1992年に設立された国際的非営利組織で、インターネット関連の標準・教育・方針についてリーダーシップを提供している。その目的は「全世界のあらゆる人々の利益のため、インターネットのオープンな開発/進歩/利用を保証する」ことである[3]。
ワシントンD.C.とスイスのジュネーブにオフィスがある。130以上の団体と55,000人以上の個人が参加している。会員は地域毎や関心事毎に支部を設立している。世界中に90以上の支部がある[3]。
歴史
ISOC は1992年、インターネットの成長に関する活動主体となる組織構造を提供するため正式に設立された。ヴィントン・サーフ、ロバート・カーン、ライマン・チェーピンが発表した Announcing the Internet Society という文書にインターネットソサエティ設立の理由が示されている。その文書には次のように当初の綱領が記されている[6]。
当協会は非営利組織とし、次のような国際的な教育的・慈善的・科学的目的に沿って運営される。
- 研究・教育基盤としてのインターネットの技術的発展を促進・サポートし、学術・科学・工学コミュニティなどがインターネットの発展に関わることを奨励する。
- インターネットの技術・利用・応用について、学界や社会を教育する。
- インターネット技術の科学的・教育的応用を促進し、様々なレベルの教育機関、産業、および一般大衆におけるその利用を高める。
- 新たなインターネットの応用について討論の場を提供し、インターネットの運営と利用について各種組織の協力関係を育む。
Internet Engineering Task Force(IETF)などのインターネット領域の様々な団体は法的には公式な組織とは呼べない状態であった(一部は現在もそうである)。そのため財政面のサポートや組織構造の面でのサポートの必要性が強まった。インターネットソサエティは、インターネットの発展のために重要なサポート構造を提供し、活動を促進するために非営利の教育団体として設立された。
インターネットソサエティはIETFの上層団体である。インターネット標準を含むIETFの全ての Request for Comments (RFC) 文書の著作権はインターネットソサエティが有している(ただし、配布は自由で無料)。しかし別の見方をすれば、ISOC は IETF から派生した団体であり、企業組織としての構造が必要な各種活動をサポートするために生まれたとも言える。実際、IETFの事務局はCNRIが担っていたが、CNRIの活動資金を提供していたアメリカ国立科学財団 (NSF) は1991年までで資金提供を打ち切るとした。そのため、インターネットソサエティが新たに設立されたという面がある。CNRIはインターネットソサエティの運営面の母体となった。
2012年、インターネットソサエティは20周年を迎え、インターネットの殿堂を創設し「インターネットの発展と進歩に重要な貢献をしたと一般に認識されている」人物を毎年表彰することにした[7][8]。
活動状況
インターネットソサエティは、標準化、社会政策、教育の主要3分野での様々な活動を行っている。
標準化活動は Internet Engineering Task Force (IETF)、インターネットアーキテクチャ委員会 (IAB)、Internet Engineering Steering Group (IESG)、Internet Research Task Force (IRTF) を通して行われる。インターネットソサエティはこれら標準化団体の作業をサポートし、促進している。インターネットソサエティはまた、オープンで透明性のある合意に基づく意思決定についての理解を促進することに努めている[9]。
ISOC は .ORG トップレベルドメインを運用しているPublic Interest Registry の親会社となっている。ISOC は毎年開催される国際会議(INET) の後援団体として、各種出版物やトレーニングセミナーに関わっている。ISOCのオフィスはバージニア州とジュネーヴにある。
社会政策活動としては、各国政府や各種組織や市民社会や民間などと共同で、インターネットの価値を高める政策の実現を促進している。そういった面でのインターネットソサエティの基本的姿勢は次の文言に表されている。
我々は、世界中の人々が生活の質を向上させるためにインターネットを活用している世界を想像している。そのためには、標準、テクノロジー、商慣習、政府の政策が、技術革新や創造性や商業的機会のためのオープンで誰でもアクセス可能な基盤を支えていく必要がある。[10]
インターネットソサエティはインターネットガバナンスについての議論の場を提供しており、例えば、世界情報社会サミット (WSIS) や インターネットガバナンスフォーラム (IGF) にも深く関与している。
教育の分野では、インターネット関連の最新の話題について実地訓練、セミナー、会議などを調整・提供することを目的としている。例えば、各地域のインターネット組織のサポート、インターネット技術についての概要文書やホワイトペーパーの発行、インターネット専門家を開発途上国に派遣する資金の提供なども行っている[11]。
2012年に開催された World IPv6 Launch というイベントを企画・運営した。このイベントはIPv6への移行促進が緊急課題であることを広く一般に知らせることを目的に、Facebook、Google、Yahoo!、アカマイ・テクノロジーズ、主なISPといった企業が賛同して実施したものである[12]。
インターネットソサエティは理事会が管理運営している[13]。
ISOC 日本支部
ISOCの日本支部は1994年8月に発足し、2009年ごろまで一般財団法人インターネット協会がISOC日本支部の役割を果たしてきた。しかし2009年に活動が停滞していたことから、「再活性化が必要な支部」とされ、2010年からは学術・産業界の有志らにより一般財団法人インターネット協会とは別の形で再活性化に向けた活動が開始された。2012年8月にISOCより正式な支部として再認定を受け、IETF報告会などの活動を実施している。[14]
脚注
- ^ Contact
- ^ JGN Vol.16 ギガビットネットワーク・シンポジウム2002スペシャル企画:JGNへの期待
- ^ a b Internet Society (ISOC) - Introduction to ISOC
- ^ IFLA、TPP交渉に懸念を示すインターネット協会らの共同声明に署名 カレントアウェアネス・ポータル Posted 2012年12月12日
- ^ インターネット白書'97
- ^ Internet Society (ISOC) All About The Internet: History of the Internet
- ^ About page, Internet Hall of Fame website. Last accessed April 24, 2012
- ^ “Internet gets Hall of Fame, Al Gore honored”. CBS News (April 24, 2012). 2012年4月24日閲覧。
- ^ Internet Society (ISOC) - ISOC's Standards Activities
- ^ Internet Society - Public Policy - ISOC's Public Policy Activities
- ^ Internet Society (ISOC) - ISOC's Education Activities
- ^ World Internet Society IPv6 Day
- ^ Board of Trustees Internet Society
- ^ ISOC-JP のご紹介
関連項目
外部リンク
- ISOCのページへのリンク