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

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.13 errno の値の保持

-fast を使用すると、コンパイラは errno 変数を設定しない同等の最適化コードを使用して呼び出しを浮動小数点関数に自由に置き換えることができます。さらに、-fast によってマクロ __MATHERR_ERRNO_DONTCARE も定義され、これはコンパイラに対し、発行された errno や浮動小数点例外の妥当性の確認を無視するように要求します。結果として、浮動小数点関数呼び出しのあとに errno または適切な浮動小数点例外の値に依存するユーザーコードが、矛盾する結果を生成する可能性があります。

この問題を回避する 1 つの方法は、-fast を使用してそのようなコードをコンパイルしないことです。ただし、-fast の最適化が必要で、コードが浮動小数点ライブラリ呼び出しのあとに正しく設定される errno の値に依存している場合は、次のオプションを使用してコンパイルしてください。

-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil

コンパイラがそのようなライブラリ呼び出しの最適化を抑止し、errno が正しく処理されることを保証するには、これらのオプションをコマンド行で -fast のあとに使用すべきです。