|
|
1.1 はじめに
プログラミング言語 C は ISO (International Organization for Standardization) でも規格化 (ISO/IEC 9899:1990) されている言語であり、日本でも JIS (日本工業規格: Japanese Industrial Standards) として制定されています。規格の内容自体は、JIS ハンドブック (1.3万円位) という一連の本の、情報系の部分に他の言語 (Fortan, Basicなど) と共に掲載されていたので、比較的気軽に知ることができました。
| |
さて、そんな C 言語ですが、実は少し仕様が追加されています。それは、日本人が提案した仕様が大部分を占めているはずなのに、ほとんど知られていない追補1 (ISO/IEC 9899/AMD1:1995 Amendment 1) です。詳細はここでは述べませんが、日本側からは、主にワイドキャラクタとその操作ルーチン (wcs*, isw*, wprintf, 他) といったような仕様が提案されました。
このような仕様が決定された後も、C 言語をより使いやすくするための作業が継続されていました。その成果が ISO の規格という形になってようやく実ろうとしています。これは、C 言語自体の規格としては久しぶりの改定にあたります (前述のは仕様の追加という形)。ここで、簡単に ISO の規格決定までの段階を示します。
国際規格の制定手順
段階 | 略称 | 名称 | 日本語による名称 |
1 | NP (New work item Proposal) | proposal stage | 新作業項目の提案 |
2 | WD (Working Draft) | preparatory stage | 作業原案の作成 |
3 | CD (Committe Draft) | committee stage | 委員会原案の作成 |
4 | DIS (Draft International Standard) | enquiry stage | 国際規格原案の照会と策定 |
5 | FDIS (Final Draft International Standard) | approval stage | 最終国際規格案の策定 |
6 | | publication stage | 国際規格の発行 |
*本表の作成と用語には、'Stages of the development of International Standards' とその要約と思われる「ISO規格制定手続き」(旧日本工業標準調査会のページに存在していた) によった。
|
|
そして、ついに 1999/12/01 付けで 「ISO/IEC 9899:1999 - Programming Language C」(略称 C99) として規格化されました。この規格は、既に出版されており、次の店から購入することかできます。
また、2001/09/01 付けで「TECHNICAL CORRIGENDUM 1」(正誤表) が、2004/11/15 付けで「TECHNICAL CORRIGENDUM 2」が出ています。
さらに、2003/12 に日本工業標準調査会から JIS X 3010:2003 として ISO/IEC 9899:1999 + TECHNICAL CORRIGENDUM 1 を翻訳した規格が公開されました。その文章は日本工業標準調査会のページ (Javascript と Cookie を有効にしたうえで、JIS 検索→規格番号検索: X3010 を入力 (注: X は大文字で入力) → 規格の閲覧) から閲覧することができます。
|
1.2 新しい予約語
プログラミング言語には、一般的に予約語が存在します。これは、プログラム中で自由に利用できない識別名のことを言います。例えば、int という単語が予約語だとすると、int という名前を、変数名や関数名として利用できないということです。
さてさて、われらがプログラミング言語 C にも当然予約語が存在しています。おさらいがてら、従来の予約語を以下に列挙してみましょう。
従来のプログラミング言語 C の予約語
auto | const | double | float | int | short | struct | unsigned |
break | continue | else | for | long | signed | switch | void |
case | default | enum | goto | register | sizeof | typedef | volatile |
char | do | extern | if | return | static | union | while |
今回のプログラミング言語 C では新たなキーワードが追加されています。さっそく見てみましょう。
最新のプログラミング言語 C で追加された予約語
名称 | 対象 | 説明 |
inline | 関数に修飾 | 可能な限り高速に呼び出すようコンパイラに指示する。例えば、この関数を呼び出した部分を単純な関数呼び出しにしないで、関数の内部コードそのもので置き換える。C++ にも存在。
|
restrict | ポインタに修飾 | そのポインタの指す対象にエイリアスがないことをプログラマが保証する。コンパイラはこの情報を元に最適化を行う。
|
_Bool | 型 | 見ての通り。値0か1を保持できる型。#include <stdbool.h> することでシンボル bool, true, false が使えるようになる。C++ にも存在。ただし、C++ では bool, true, false はすべて予約語。_Bool は存在しない。
|
_Complex _Imaginary | 一連の float 型を修飾 | _Imaginaryはオプション(Informative な仕様)。_Complex は Freestanding implementations ならオプション。_Complex, _Imaginary で、複素数演算をサポートする。#include <complex.h> とすることで、complex, imaginary, I といったシンボルが使用可能になる。(double complex)(1.2 + I * 5.4); のような複素数の表記、演算などが可能。
|
*_Bool, _Complex, _Imaginary は他の修飾子と表記法が異なっている。特定のヘッダファイルを取り込むことにより他の修飾子と同様の表記が可能になっている。これは、現存するソースファイルに bool や complex などの識別名がすでに使用されていることが考えられるため、新しい機能を使いたい人だけが利用可能なようにするためであると考えられる。
|
各予約語のもっと詳しい紹介はいずれ行うとしても、ついに複素数のサポートが入りました。人によっては、この機能だけで新しい C 言語を使いたいと思う人もいるかもしれませんね。
1.3 新しいヘッダファイル
K&R の時代の C 言語では、プロトタイプ宣言はありませんでした。したがって、コンパイル時には、型検査はできず、その正当性はプログラマが保証するしかありませんでした。ANSI C ができてからは、プロトタイプ宣言をすることで、分割コンパイル時の型検査をすることができるようになりました。その結果、プログラマの負担を減らし、プログラムの信頼性をあげることができました。そのプロトタイプ宣言とある種のマクロや定数などが定義されているのがヘッダファイルと呼ばれるものです。通常ヘッダファイルは、なんとか.h と言うように、拡張子「.h」をつけることであらわします (C++ では拡張子をなくすという暴挙に出てますが...)。そのヘッダファイルをソースファイルに取り込むことで、そのヘッダにある機能が有効になるのです。
そして今度の C 言語でも新たなヘッダファイルが追加されています。従来のヘッダファイルと追加されたヘッダファイルを見てみましょう。
表の中で赤の部分が今回の規格で追加されるヘッダファイルです。今回の C 言語では整数型に関係のある部分の整備や浮動小数点演算の強化などが行われています。具体的にどんな内容なのでしょうか?楽しみですね。
|
|
|