インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
式の評価で括弧を考慮して最適化するかどうかを指定します。
Linux* および OS X*: | -fprotect-parens -fno-protect-parens |
Windows®: | /Qprotect-parens /Qprotect-parens- |
なし
-fno-protect-parens |
式評価の順序で括弧は無視されます。 |
このオプションは、式の評価で括弧を考慮して最適化するかどうかを指定します。
-fprotect-parens (Linux* および OS X*) または /Qprotect-parens (Windows®) オプションを指定すると、括弧で指定された順序で式が評価されます。
-fno-protect-parens (Linux* および OS X*) または /Qprotect-parens- (Windows®) オプションを指定すると、より高速なコードを生成できる場合、式評価の順序で括弧は無視されます。
なし
次の式について考えてみます。
A+(B+C)
デフォルトでは、括弧は無視され、コンパイラーは、最適化レベルや -fp-model (Linux* および OS X*) または /fp (Windows®) オプションの設定などに応じて、より高速なコードを生成するように操作を並べ替えます。 操作の順序が問題になるコード (一部の浮動小数点演算など) では、異なる結果を生成することがあります。
ただし、-fprotect-parens (Linux* および OS X*) または /Qprotect-parens (Windows®) を指定すると、浮動小数点式 (複素数浮動小数点と 10 進浮動小数点を含む) を囲む括弧が考慮され、通常の優先順位規則に従って式が評価されます。つまり、最初に B+C が計算され、その結果に A が足されます。
括弧を無視する場合と比べると、コードの実行速度は遅くなる可能性があります。浮動小数点の精度が問題になる場合は、-fp-model precise (Linux* および OS X*) または /fp:precise (Windows®) オプションを使用すべきです。このオプションは、精度に影響するすべての最適化を制御します。