函式
<cfenv>

fesetexceptflag

int fesetexceptflag (const fexcept_t* flagp, int excepts);
設定浮點異常標誌
嘗試使用由 flagp 指向的物件中儲存的狀態,來設定 excepts 所指示的異常。

如果成功,該函式會更改浮點環境的當前狀態,設定所請求的異常標誌,但實際上並不會引發異常。

呼叫此函式的程式應確保在呼叫時啟用了 pragma FENV_ACCESS

引數

flagp
指向一個 fexcept_t 物件的指標,該物件表示浮點異常。
flagp 指向的值必須是先前透過呼叫 fegetexceptflag 設定的,並且至少包含 excepts 指定的異常。
excepts
位掩碼值:實現所支援的任意數量的浮點異常值透過按位或(OR)運算的組合。
宏值描述
FE_DIVBYZERO極點錯誤:除以零,或一些其他漸近無窮大的結果(由有限引數產生)。
FE_INEXACT不精確:結果不精確。
FE_INVALID定義域錯誤:至少有一個引數是函式未定義的值。
FE_OVERFLOW上溢範圍錯誤:結果的量級太大,無法表示為返回型別的值。
FE_UNDERFLOW下溢範圍錯誤:結果的量級太小,無法表示為返回型別的值。
FE_ALL_EXCEPT所有異常(選擇實現支援的所有異常)。
某些庫實現可能支援額外的浮點異常值(其對應的宏也以 FE_ 開頭)。
庫可能僅在 <fenv.h> 中定義它們支援的上述宏值(其他宏可能未定義)。
至少所有上述宏值都在 <cfenv> 中有定義(即使實現不支援)。

返回值

如果函式成功設定了標誌(或如果 excepts 為零),則返回零。
否則返回一個非零值。

資料競爭

每個執行緒維護一個獨立的浮點環境及其自身的狀態。生成一個新執行緒會複製當前狀態。[此規定適用於 C11 和 C++11 實現]

異常

無異常保證:此函式從不丟擲異常。
請注意,C 語言的浮點異常不是 C++ 異常,因此不能被 try/catch 塊捕獲。
在 pragma FENV_ACCESS 關閉的情況下呼叫此函式會導致未定義行為。

另見