表紙 / 自作ソフト / 日記 / 宝箱 / サイト情報 / 検索
一般 / 新C言語 / 駄文

プログラミング言語 C の新機能


←前頁へ◎表紙へ次頁へ→
 
 

1. 概略
1.1 はじめに
1.2 新しい予約語
1.3 新しいヘッダファイル
2. C プリプロセッサ
2.1 新しいコメント表記方法
2.2 空引数を許された関数型マクロ呼出し
2.3 可変個数引数を持つマクロ定義
2.4 あらかじめ定義されているマクロ名
2.5 プログラミング言語 C 標準プラグマ
2.6 単項演算子 _Pragma
2.7 プリプロセッサ式における整数型
2.8 文字列定数とワイド文字列定数の結合
3. 字句
3.1 ユニバーサルキャラクタ名
3.2 拡張された識別名使用文字
3.3 浮動小数点定数の 16 進数表記
4. 配列
4.1 可変長配列
4.2 構造体中の 0 長配列メンバ
4.3 配列要素中の記憶/型修飾子
5. 整数型
5.1 _Bool 型
5.2 long long int 型
5.3 long long int 型の定数
5.4 整数除算
6. 複素数型
6.1 _Complex 型
6.2 _Imaginary 型
6.3 複素数に関する四則演算
7. 文法一般
7.1 暗黙の関数宣言
7.2 宣言時の暗黙の型
7.3 前定義識別名 __func__
7.4 enum 宣言での余分なカンマ
7.5 inline 関数定義
7.6 restrict ポインタ
7.7 変数宣言と実行コードの位置関係
7.8 指示付きの初期化子 (Designated Initializer)
7.9 複合リテラル (Compound Literal)
7.10 選択文と反復文のブロック化
8. 標準ライブラリ(拡張)
8.1 ctype.h
8.2 float.h
8.3 math.h
8.4 stdarg.h
8.5 stdio.h
8.6 stdlib.h
8.7 wchar.h
8.8 wctype.h
9. 標準ライブラリ(新規)
9.1 complex.h: 複素数
9.2 fenv.h: 浮動小数点環境
9.3 inttypes.h
9.4 stdbool.h
9.5 stdint.h
9.6 tgmath.h: 型総称数学関数
A. 付録
A.1 strftime 書式指定子
A.2 printf の書式

1. 概略

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 の規格決定までの段階を示します。

国際規格の制定手順
段階略称名称日本語による名称
1NP (New work item Proposal)proposal stage新作業項目の提案
2WD (Working Draft)preparatory stage作業原案の作成
3CD (Committe Draft)committee stage委員会原案の作成
4DIS (Draft International Standard)enquiry stage国際規格原案の照会と策定
5FDIS (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 は大文字で入力) → 規格の閲覧) から閲覧することができます。
Programming Languages - C

ShopDocument NumberElectronic PriceHardcopy PriceNotes

日本規格協会JIS X 3010:2003¥14,280¥14,280PDF: 9.85MB, 474ページ
ANSI Electronic Standards StoreBS ISO/IEC 9899:1999 $290
(¥34800)
-PDF: 1.34MB
ANSI Electronic Standards StoreINCITS/ISO/IEC 9899-1999 $30
(¥3600)
-PDF: 1.34MB
GLOBAL ENGINEERING DOCUMENTSINCITS/ISO/IEC 9899 $30
(¥3600)
$277
(¥33240)
出版日:1999/12/01
ページ数:553
GLOBAL ENGINEERING DOCUMENTSBS ISO/IEC 9899- $303
(¥36360)
出版日:2004/09/00
ページ数:556
イギリスの規格 (British Standard)
Amazon.co.jp
他所でも購入可。ISBN 番号などで検索のこと。
ISBN: 0470845732

The C Standard : Incorporating Technical Corrigendum 1
- $67
(¥8092)
出版日:2002/09/12 または 2003/09/05
ページ数:558
TC1(正誤表) 反映済みの英国規格協会 (British Standards Institute) の書籍

ANSI Electronic Standards StoreISO/IEC 9899:2011 $387
(¥46440)
- 

レート: 円/ドル

注意:
 購入するときの国で料金が変わることがある。
 INCITS は InterNational Committee for Information Technology Standards (情報技術規格国際委員会) の略。
 BS は BSI (British Standard Institution: 英国規格協会) 発行の British Standard。
(2003/09/21 現在)


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 のヘッダファイル
ISO/IEC 規格対象説明
9899:1990 assert.h診断
ctype.h文字処理
errno.hエラー
float.h浮動小数点型特性
limits.h整数型の大きさ
locale.hローカライゼーション
math.h数学
setjmp.h大域ジャンプ
stdarg.h可変引き数
stddef.h共通定義
stdio.h標準入出力
stdlib.h一般的な関数
signal.hsignal処理
string.h文字列処理
time.h日付
9899/AMD1:1995 iso646.h代変表記
wchar.h拡張マルチバイト文字,ワイドキャラクタ
wctype.hワイドキャラクタ分類、マップ
9899:1999 inttypes.h整数型書式変換
complex.h複素数
stdbool.hbool型と値
tgmath.h型総称数学関数
fenv.h浮動小数点環境
stdint.h整数型

 表の中で赤の部分が今回の規格で追加されるヘッダファイルです。今回の C 言語では整数型に関係のある部分の整備や浮動小数点演算の強化などが行われています。具体的にどんな内容なのでしょうか?楽しみですね。

←前頁へ◎表紙へ次頁へ→
 
 
表紙 - 著作権 - 注意事項 - リンクについて - 404 エラーについて
(c)1999-2014 seclan. All rights reserved.