最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

function
<cfenv>

# std::fegetexceptflag(C++11)

    namespace std {
      int fegetexceptflag(fexcept_t *flagp, int excepts);
    }

## 概要

浮動小数点例外の現在の状態を、実装定義の表現で取得する。

この関数は、現在発生している浮動小数点例外のうち、指定された例外の集合のみを抽出して、実装定義の表現に変換して返す。

## 効果

ビット演算のORで複数指定された浮動小数点例外の種類`excepts`の例外発生状態を、実装定義の表現に変換して`flagp`に書き込んで返す。

## 戻り値

実装定義の表現への変換および書き込みに成功したら`0`、そうでなければ`0`以外の値を返す。

## 例

    // 標準C++の浮動小数点例外を、
    // Visual C++での浮動小数点例外の形式に変換する
    #include <iostream>
    #include <cfenv>
    #include <cfloat>

    int main()
    {
      float a = 1.0f;
      float b = 0.0f;
      float result = a / b;

      std::fexcept_t excepts = 0;
      std::fegetexceptflag(&excepts, FE_ALL_EXCEPT);

      if (excepts & _SW_ZERODIVIDE)
      {
        std::cout << "zero divided" << std::endl;
      }
    }

### 出力例

    zero divided

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.0 ✅
- GCC: 4.3.0 ✅
- ICC: ??
- Visual C++: 2013 ✅, 2015 ✅
  - コンパイルオプション`/fp:strict`または`#pragma fenv_access (on)`が必要。さもなくば、正しく動作しないおそれがある。