Oracle Solaris Studio 12.2:C 用户指南

2.13 保留 errno 的值

使用 -fast,编译器可以用不设置 errno 变量的等效优化代码自由替换对浮点函数的调用。而且,-fast 还会定义宏 __MATHERR_ERRNO_DONTCARE,使编译器无需确保 errno 的有效性。因此,在浮点函数调用后依赖于 errno 值的用户代码可能生成不一致的结果。

解决此问题的一种方法是避免用 -fast 编译此类代码。但是,如果需要 -fast 优化并且代码依赖于在浮点库调用后正确设置的 errno 值,应使用以下选项进行编译

-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil

然后,在命令行上使用 -fast,以禁止编译器优化此类库调用,并确保正确处理 errno