● 関数リファレンス

浮動小数点例外のチェック

    void __stdcall    floatex_fwait(void);

引数

無し

戻り値

無し

説明

fwait 命令を実行し、未処理の浮動小数点例外をチェックします。未処理の例外があり、その例外がマスクされていない場合は、例外処理を行います(既に発生している例外の処理を行う)。
処理すべき例外が発生していない場合は、何もせずに関数を終了します。

テスト.

#include <stdio.h>
#include "floatex.h"

void __cdecl    main(void)
{
    floatex_reset();

    __try{
        FLOATEX     val;

        /*
          ゼロ除算
          この時点ではマスクが掛かっているので、例外処理は行われません
        */
        floatex_ediv(fex_const_1,fex_const_0,val);

        if (floatex_exceptionflags(FEX_STAT_ZE)){       /* ゼロ除算例外を検出 */

            floatex_loadcw2(FEX_PC_64 | FEX_RC_NEAR);   /* 例外マスク解除 */

            printf("前処理\n");

            floatex_fwait();                            /* 例外ハンドラへ */
        }
    }
    __except(1){
        printf("except ブロック\n");
    }

    floatex_reset();
}

この関数は、汎用レジスタの内容を変えません。また、EFLAGS の内容を保存します。