表紙 / 自作ソフト / 日記 / 宝箱 / サイト情報 / 検索
一般 / 新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 の書式

3. 字句
 本章では、新たに C 言語に加わったユニコードを想定した文字コードの指定方法、それを用いた識別名表記方法、正確な浮動小数点定数指定方法について説明します。

3.1 ユニバーサルキャラクタ名
 今までの C 言語では、文字列や文字定数の中に直接文字コードの値を指定することが可能でした。例えば、"\x0d\x0a" や '\0' のような記述方法です。しかし、C 言語が wchar_t といったワイドキャラクタを含むように拡張された後、wchar_t の文字コードを直接指定する方法は決められていませんでした。
 今度の C 言語ではその方法が規定され記述できるようになりました。文字コードとしては ISO/IEC 10646、 いわゆる UNICODE が想定されています。この記述法は仕様ではユニバーサルキャラクタ名(universal character name)と名づけられており、プログラミング言語 Java での記述によく似ています。具体的な記述方法は次の通りです。

ユニバーサルキャラクタ名
表記説明
\uxxxxx:16進数,4桁固定,\U0000xxxxと同じ意味
\Uxxxxxxxxx:16進数,8桁固定
注意
 識別名、文字定数、文字リテラルに使用可能
 キャラクタセット中の文字で表現できるのならこの表記を使うべきではない
 識別名として、
  \u0000-\u0020 制御 空白(0x20)
  \u007f-\u009f 制御
  \ud800-\udfff サロゲート(surrogate)
 の文字を使用すべきでない。  

ところで、サロゲート(surrogate)って知ってますか? UNICODE は世界中のすべての文字を 16 bit の中に入れようとして作っていました。しかし、わかっていたことではありますが、やはり 16 bit にすべて押し込むことは無理でした。そこで仕方が無いのである特定の文字部分ではさらにもう一文字追加して、32 bit で一文字をあらわすことにしました。その特定の領域の部分をサロゲートといい、それを使った文字をサロゲートペアによる指定などといいます。

3.2 拡張された識別名使用文字
 従来の C 言語では識別名として使用できる文字は、アルファベットの大文字、小文字、数字(ただし識別名の先頭以外)、_ という文字に制限されていました。従って、日本語で使用される文字を使った識別名(例えば、「処理フラグ」)などは使用することができませんでした。
 しかし、新しい C 言語ではユニバーサルキャラクタ名と実装依存のマルチバイト文字を使用することができるようになりました。例えば、「\u51e6\u7406\u30d5\u30e9\u30b0」といった識別名や、実装者が許せば「処理フラグ」といったマルチバイト識別名を利用することが可能になったのです。ただし、その場合でも先頭の文字が数字であってはいけません。

3.3 浮動小数点定数の 16 進数表記
 計算機で浮動小数点数を扱うと必ず誤差の問題が付きまといます。例えば 10 進数の 0.1 という数値は、2進数では循環小数 0.0[0011] (0011 の部分を永遠に繰返す)となり、正確に 0.1 という値をあらわすことがきません。コンパイラなどの言語処理系は 10 進数で書かれた浮動小数点数を 2 進数に変換するので、このときの変換アルゴリズムにより、表現している値が微妙に変化してしまうことがあります。これは 10 進数から 2 進数への変換を処理系に任せることにより起こっている問題です。したがって、直接 2 進表現で浮動小数点定数を記述できれば、この問題はなくなります。
 今度の C 言語では、16 進数で浮動小数点定数を記述できるようになります。書き方は、0xaaaa.ccccP+10 のように記述します。aaaa の部分には 16 進数で整数部分を、cccc の部分には 16 進数で小数部分を、P の後ろには指数(2 のべき乗)を 10 進数で書きます。P は小文字 p でも許されており、また p の後ろには符号 + か - の記述も許されています。16 進整数定数と間違えないようにするため、この指数部は省略することができないので必要がないときも必ず 0x1234P0 のように記述する必要があります。0x1234P0f や 0x1234P0FL のように明示的に浮動小数点定数であることを示すこともできます。
 この表記を printf を使って表示するには、「a」または「A」を変換指定子として指定します。小文字の「a」を使ったときには、0x1.2345p+10 のように、「x」と「p」が小文字で表示されます。大文字の「A」を使ったときには、0X1.2345P+10 のように、「X」と「P」が大文字で表示されます。
 scanf で読み取るときには「a」を変換指定子として指定します。

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