Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

6.9.5 as if 規則

K&R C の再配置規則の理由を、次にいくつか示します。

  • 再配置によって、より多くの最適化の機会が生まれること (たとえば、コンパイル時の定数折り畳み)

  • ほとんどのマシンにおいて、再配置によって整数型の式の結果が変わらないこと

  • すべてのマシンにおいて、いくつかの演算が数学的にも演算的にも交換可能で結合可能であること

ISO C 委員会は、記述される対象アーキテクチャーに適用されるときに、再配置規則は「as if」規則のインスタンスになるものであると、最終的に決定しました。ISO C の「as if」規則は、有効な C プログラムの動作を変更しないかぎり、実装が必要に応じて抽象マシン記述から離れることを一般的に許可しています。

したがって、すべてのビット単位の 2 項演算子 (シフトを除く) は任意のマシンで再配置できます。これは、そのような再グループ化は確認不可能であるためです。2 の補数を使用するマシンでオーバーフローが発生しない場合は、いくつかの理由のため、乗算または加算を含む整数式は再配置できます。

したがって、C におけるこの変更は、ほとんどの C プログラマには重要な影響を与えません