プログラミング言語 C の新機能 Part VII: CPP#4:ユーザが決める!
(1999/04/18 [日])
今までの C 言語では、C プリプロセッサにおいて pragma という指令を設けて、それを使用することでベンダ定義の指令を与える方法を定義していました。しかし、これには標準 C 言語自身が提供するプラグマは含まれませんでした。今度の C 言語では、STDC というプラグマを決定し、このプラグマを使用することで標準 C 言語のプラグマを提供することにしました。このプラグマを利用して提供される標準 C 言語のプラグマは以下の通りです。
新たに定義されたものは、浮動小数点や複素数関係なのでそれらを使わない人はめったに使うことはないでしょう。
プラグマ | 説明 |
---|---|
#pragma STDC FP_CONTRACT on-off-switch | 浮動小数点演算で、省略された計算をするかどうか。ここでいう省略とは、浮動小数点演算におけるいくつかの特徴を省くこと。例えば、演算の結果精度落ちなどの例外が発生しても、それを通知しないといったことが挙げられる。省略の結果として、演算の高速化が可能になる可能性がある。デフォルト値は実装依存である。プラグマの有効範囲は通常の変数と同じ扱いになる。したがって、{ } の中でプラグマを使ってもその外に出ればその { } に入る直前の値に戻る。 |
#pragma STDC FENV_ACCESS on-off-switch | fenv.h で定義される浮動小数点環境へのアクセスの有効化、無効化を指定する。浮動小数点環境には、例えば浮動小数点ステータスフラグといったものがある。もし fenv.h で定義される浮動小数点環境を使用しないときには、これを off にすることで高速化をはかることができる。プラグマの有効範囲は通常の変数と同じ扱いとなる。デフォルト値は実装依存である。 |
#pragma STDC CX_LIMITED_RANGE on-off-switch | 複素数の掛け算、割り算、絶対値の計算における通常の数学式は無限大の扱いや、適切でないオーバーフローやアンダーフローといった部分に問題がある。そこでこのプラグマをONにすることで通常の数学式でうまく計算するよう指示する。これは、次の計算式の実装を許すものである。 (x+iy) × (u+iv) = (xu-vy) + i(yu+xv) (x+iy) ÷ (u+iv) = [(xu+yv) + i(yu-xv)] ÷ (u2+v2) |x+iy| = √(x2 + y2) プラグマの有効範囲は通常の変数と同じ扱いとなる。デフォルト値は off である。 |
*注意: (1)on-off-switchは ON, OFF, DEFAULT のいずれか。 (2)#pragma STDC は標準C言語のために予約。ユーザ定義不可。 |
新たに定義されたものは、浮動小数点や複素数関係なのでそれらを使わない人はめったに使うことはないでしょう。
by seclan