设置启动时生效的IEEE 陷阱操作模式,但不安装 SIGFPE 处理程序。可以使用 ieee_handler(3M) 或 fex_set_handling(3M) 启用陷阱并同时安装 SIGFPE 处理程序。如果指定多个值,则按从左到右顺序处理列表。
t 可以是下列值之一。
表 A–14 -ftrap 值
值 |
含义 |
---|---|
[no%]division |
[不] 在除以零时自陷。 |
[no%]inexact |
[不] 在结果不精确时自陷。 |
[no%]invalid |
[不] 在无效操作上自陷。 |
[no%]overflow |
[不] 在溢出上自陷。 |
[no%]underflow |
[不] 在下溢上自陷。 |
%all |
在所有以上内容中自陷。 |
%none |
不在以上任何内容中自陷。 |
common |
在无效、除以零和溢出时自陷。 |
注意,选项的 [no%] 形式只用于修改 %all 和 common 值的含义,且必须与其中的一个值一起使用,如以下示例所示。选项自身的 [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。
ieee_handler(3M) 和 fex_set_handling(3M) 手册页。