pragma STDC FENV_ACCESS ON不受支持

时间:2015-11-02 05:24:00

标签: c++ c++11 floating-point c++14 pragma

我尝试稍微修改the article中的示例:

#include <iostream>
#include <cfenv>

#pragma STDC FENV_ACCESS ON

int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    //int r = std::feraiseexcept(FE_UNDERFLOW | FE_DIVBYZERO);
    double x = 1.0;
    double y = 0.0;
    double result{};
    asm volatile ("fldl %1\n"
                  "fdivl %2\n" : "=%t"(result) : "m"(x), "m"(y) : "memory");
    std::cout << result << std::endl;
    int e = std::fetestexcept(FE_ALL_EXCEPT);
    if (e & FE_DIVBYZERO) {
        std::cout << "division by zero\n";
    }
    if (e & FE_INEXACT) {
        std::cout << "inexact\n";
    }
    if (e & FE_INVALID) {
        std::cout << "invalid\n";
    }
    if (e & FE_UNDERFLOW) {
        std::cout << "underflow\n";
    }
    if (e & FE_OVERFLOW) {
        std::cout << "overflow\n";
    }
    return EXIT_SUCCESS;
}

但我收到警告(对于 clang ++ ,但 G ++ 也是如此):

warning: pragma STDC FENV_ACCESS ON is not supported, ignoring pragma [-Wunknown-pragmas]
#pragma STDC FENV_ACCESS ON
             ^
1 warning generated.

Another article报告说,pragma是对待所谓的 C标准编译指示的类,但前面提到的文章确实包含了使用pragma的代码。

是否允许在 C ++ 代码中使用pragma? C ++ 中有<cfenv>标头。它暗示了这个Floating-point environment可用于 C ++ 。但this article报告了浮点环境的实现依赖性。这涉及 C ++ 吗?

0 个答案:

没有答案