如果设置为on,程序通知编译器它可以访问浮点环境来测试它的状态标志(异常)或在非默认的控制模式下运行。
如果设置为off,编译器可能会执行某些优化,从而破坏这些测试和模式更改,
因此在上述情况下访问浮点环境会导致未定义的行为。
该pragma的默认状态是开启还是关闭取决于编译器设置和库实现。
pragma声明将出现以下两种情况:
-
在任意外部声明之外:它的效果将持续到遇到另一个FENV_ACCESS语句,或直到编译单元结束。
-
在复合语句中:在这种情况下,它应该在所有显式声明和语句之前。
它的效果一直持续到遇到另一个FENV_ACCESS语句(例如嵌套复合语句),
或者直到复合语句结束。在复合语句之后,pragma的状态将恢复到进入它之前的状态。
如果该pragma出现在其他上下文中,则该行为是未定义的。
当状态被此pragma指令改变时,浮点控制模式(如舍入方向)有其默认设置,但浮点状态标志的状态是未指定的。