如何编译具有不同浮点选项的部分代码?

How to compile parts of code with different floating-point options?

我正在使用英特尔编译器优化一些 C++ 代码,我需要在单个源文件中的某些代码部分使用不同的编译选项。

我知道 #pragma pack 指令可以在代码中更改结构成员的对齐方式,但我想知道是否还有其他指令用于其他选项。

就我而言,我正在使用 /fp:precise 选项编译我的代码,但我想在代码的某些部分使用 /fp:fast

您可以 select 一些 浮点选项 用于特定函数 使用 #pragma float_control(两者都支持MSVC 和英特尔® C++ 编译器)。

但是,请注意链接文档中给出的重要警告:

The float_control pragma doesn't have the same behavior as the /fp compiler option. The float_control pragma only governs part of the floating-point behavior. It must be combined with fp_contract and fenv_access pragmas to recreate the /fp compiler options ...

使用此指令和相关的 #pragma 指令 允许您在单个翻译单元中编译代码段 有不同的选项。

根据链接文档中显示的 table(在引用文本下方), /fp:precise 和 [=15= 之间的区别] 由 float_control pragma 控制(但您需要其他人从 /fp:strict 切换),因此像下面这样的代码将允许给定源文件中的一个函数使用 fast 选项:

#pragma float_control( precise, off, push ) // Save current setting and turn off /fp:precise
double FastFloatFunc(double x)
{
    double y = x * (x - 1);
    // Do something: Generated code will use /fp:fast
    return y;
}
#pragma float_control(pop) // Restore file's default settings