2016-07-14 6 views

答えて

1

C11仕様によると、volatileにアクセスすることは副作用とみなされます。したがって、コンパイラは、あなたの例で(そうでなければ無駄な)アクセスを最適化すべきではありません。

答えは、はい、メモリから読み込む必要があります。

セクション5.1.2.3セクション2を参照してくださいC11規格(案)、:

これらの操作のいずれかがすべてですない関数を呼び出し、揮発性のオブジェクトへのアクセスオブジェクトを変更、ファイルを変更、または 側 効果は、実行の状態の変更である 環境です。表現の評価には、一般に、値の計算と副作用の開始の両方が含まれます。値の計算のための値計算 は、指定されたオブジェクト のアイデンティティを決定することを含む。さらに

、4氏は述べています: セマンティクスで指定された抽象マシンで

、すべての式が評価されています。実際の実装では、その値が使用されておらず、 の副作用が発生していないと推定できる場合( 関数の呼び出しや揮発性オブジェクトへのアクセスを含む)、 式の一部を評価する必要はありません。

+0

'結果が決してどこにも出てこない場合でも、1つの式文が評価されなければならないように、すべての式はセマンティクスの指定に従って評価されます。 – dronus

+0

読み取りアクセスが副作用と見なされるかどうかはなお疑問です。 – dronus

+0

@ドロヌス、何? "揮発性の物体へのアクセス... [は]副作用"かなり明らかに見えます。 – sinelaw

関連する問題

 関連する問題