名前空間
変種
操作

as-ifルール

From cppreference.com
< c‎ | language

プログラムの観測可能な動作を変更しない、あらゆるコード変換を許可します。

[編集] 説明

Cコンパイラは、以下のことが真である限り、プログラムに対してあらゆる変更を行うことができます。

1) すべてのシーケンスポイントにおいて、すべてのvolatileオブジェクトの値は安定している(以前の評価は完了し、新しい評価は開始されていない)。
(C11まで)
1) volatileオブジェクトへのアクセス(読み取りと書き込み)は、それらが出現する式のセマンティクスに厳密に従って発生します。特に、同じスレッド上の他のvolatileアクセスと比較して、順序が変更されることはありません
(C11 以降)
2) プログラム終了時、ファイルに書き込まれたデータは、プログラムが記述されたとおりに実行された場合とまったく同じです。
3) 対話型デバイスに送信されるプロンプトテキストは、プログラムが入力待ちになる前に表示されます。
4) #pragma STDC FENV_ACCESSプラグマがサポートされており、ONに設定されている場合、浮動小数点環境(浮動小数点例外と丸めモード)への変更は、浮動小数点演算子と関数呼び出しによって、記述されたとおりに実行されたかのように観察されることが保証されます。ただし、以下を除きます。
  • キャストおよび代入以外の浮動小数点式の結果は、その式の型とは異なる浮動小数点型の範囲と精度を持つ場合があります(FLT_EVAL_METHODを参照)。
  • 上記にもかかわらず、任意の浮動小数点式の中間結果は、無限の範囲と精度であるかのように計算される場合があります(#pragma STDC FP_CONTRACTOFFでない限り)。
(C99以降)

[編集] 注釈

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)