Sun Studio 12:C 用户指南

B.2.29 -ftrap=t[ ,t...]

设置启动时生效的 IEEE 捕获模式,但不安装 SIGFPE 处理程序。可以使用 ieee_handler(3M) 或 fex_set_handling(3M) 启用陷阱并同时安装 SIGFPE 处理程序。如果指定多个值,则按从左到右顺序处理列表。

t 可以是下列值之一。

表 B–9 -ftrap 标志

标志 

含义 

[no%]division

[不] 在除以零时自陷。 

[no%]inexact

[不] 在结果不精确时自陷。 

[no%]invalid

[不] 在无效操作上自陷。 

[no%]overflow

[不] 在溢出上自陷。 

[no%]underflow

[不] 在下溢上自陷。 

%all

在所有以上内容中自陷。 

%none

不在以上任何内容中自陷。 

common

在无效、除以零和溢出时自陷。 

注意,选项的 [no%] 形式只用于修改 %allcommon 值的含义,且必须与其中的一个值一起使用,如以下示例所示。选项自身的 [no%] 形式不会显式导致禁用特定的陷阱。

如果不指定 –ftrap,则编译器假定 –ftrap=%none

示例:–ftrap=%all,no%inexact 意味着设置所有陷阱,但 inexact 除外。

如果先使用 –ftrap=t 编译一个例程,就还要使用相同的 -ftrap=t 选项来编译程序的所有例程;否则就会获得意外的结果。

使用 -ftrap=inexact 陷阱时务必谨慎。只要浮点值不能精确表示,使用 –ftrap=inexact 便会产生陷阱。例如,以下语句就会产生这种情况:


x = 1.0 / 3.0;

只有编译主程序时该选项才有效。请小心使用该选项。如果希望启用 IEEE 陷阱,请使用 –ftrap=common