揮発性パラメーターを持つ関数を呼び出し、そのパラメーターが使用されていない場合でも、コンパイラーはパラメーターを生成する必要がありますか?
void consume( volatile int ) { }
...
consume( some_expr );
GCCはこれを尊重しますが、規格の揮発性の表現がこれを要求するかどうかはわかりません。私の意見では、GCCは正しいことを行っています-これは論理的には揮発性変数への割り当てであるため、省略しないでください(c ++標準の1.9-8による)
注:これの目的は、オプティマイザーがコードの評価を削除しないようにすることです。つまり、強制的some_expr
に評価されます。これにより、式を最適化できますが、実際に実行されることが保証されます。
違いがある場合は、両方の興味に対する答えとして、CとC++をタグとして追加しました。しかし、そうなるとは思いません。
答え:最初のものを選んだのは、それが標準の正しい実用的な実現であると信じているからです。ただし、スティーブの哲学的観点は非常に興味深いものであり、実際には標準があいまいであることを意味している可能性があります。