void trigger_read_register()
{
SOME_REGISTER;
}
はSOME_REGISTER
の読み取り要求trigger_read_register()
問題を呼び出すことでしょうか?
void trigger_read_register()
{
SOME_REGISTER;
}
はSOME_REGISTER
の読み取り要求trigger_read_register()
問題を呼び出すことでしょうか?
C11仕様によると、volatileにアクセスすることは副作用とみなされます。したがって、コンパイラは、あなたの例で(そうでなければ無駄な)アクセスを最適化すべきではありません。
答えは、はい、メモリから読み込む必要があります。
セクション5.1.2.3セクション2を参照してくださいC11規格(案)、:
これらの操作のいずれかがすべてですない関数を呼び出し、揮発性のオブジェクトへのアクセスオブジェクトを変更、ファイルを変更、または 側 効果は、実行の状態の変更である 環境です。表現の評価には、一般に、値の計算と副作用の開始の両方が含まれます。値の計算のための値計算 は、指定されたオブジェクト のアイデンティティを決定することを含む。さらに
、4氏は述べています: セマンティクスで指定された抽象マシンで
、すべての式が評価されています。実際の実装では、その値が使用されておらず、 の副作用が発生していないと推定できる場合( 関数の呼び出しや揮発性オブジェクトへのアクセスを含む)、 式の一部を評価する必要はありません。
'結果が決してどこにも出てこない場合でも、1つの式文が評価されなければならないように、すべての式はセマンティクスの指定に従って評価されます。 – dronus
読み取りアクセスが副作用と見なされるかどうかはなお疑問です。 – dronus
@ドロヌス、何? "揮発性の物体へのアクセス... [は]副作用"かなり明らかに見えます。 – sinelaw