pragma
<cfenv>

FENV_ACCESS

on (1)
#pragma STDC FENV_ACCESS on
off (2)
#pragma STDC FENV_ACCESS off
访问浮点数环境
如果设置为 on,程序会通知编译器它可能访问浮点数环境来测试其状态标志(异常)或在默认以外的控制模式下运行。

如果设置为 off,编译器可以执行某些可能破坏这些测试和模式更改的优化,因此在这种情况下访问浮点数环境会导致未定义行为

此 pragma 指令的默认状态是 on 还是 off 取决于编译器设置和库实现。

pragma 指令声明应该出现在
  • 任何外部声明之外: 其效果会一直持续到遇到另一个 FENV_ACCESS pragma 指令,或者直到翻译单元结束。
  • 在复合语句内部: 这种情况下,它应该出现在所有显式声明和语句之前。其效果会一直持续到遇到另一个 FENV_ACCESS pragma 指令(例如在嵌套的复合语句中),或者直到复合语句结束。在复合语句之后,pragma 指令的状态会恢复到进入复合语句之前的状态。
如果此 pragma 指令出现在其他上下文中,则行为是未定义的。

当通过此 pragma 指令更改状态时,浮点数控制模式(例如舍入方向)会恢复到其默认设置,但浮点数状态标志的状态是不确定的。

另见