0除以0怎麼使用c 的異常處理,例如try?

時間 2021-05-31 15:43:56

1樓:麻辣牛肉

c++中異常的概念和cpu中的異常是不一樣的。除0會觸發cpu異常,然後執行中斷處理程式,發訊號給程序,程序通過呼叫訊號處理程式來處理。只有修改了除數,才能繼續執行下去,否則會一直觸發除0異常。

但是修改除數在c++裡是做不到的,只有通過彙編。

2樓:ggffss

__try

__except

(GetExceptionCode

()==

EXCEPTION_INT_DIVIDE_BY_ZERO?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH)windwos only

3樓:Mr.Sandman

當變數值為: -1.#IND000000000000 時,就是變數 (NAN)Not-A-Number(非數字)

當變數值為: -1.#INF000000000000 時,就是變數 (INF)Infinite(無窮大)

Windows中,使用_isnan判斷NaN情況;使用!_isnan && !_finite判斷INF情況;使用!_finite判斷NaN和INF兩種情況

//0/0的情況下或得到NAN,非零除以零會得到INF

double

spread

=0.0

;spread

/=0.0;if

(_isnan

(spread

))if(!

_isnan

(spread)&&

!_finite

(spread

))if(!

_finite

(spread

))依據以下特性也可自己實現判斷:

1. NaN是唯一與自身不等的浮點數型別,所以IsNan可以用 x != x來判斷。

Anything compared with NAN is false, so NAN == NAN is false.

2. INF階碼全1,尾數全0

intisNaN

(doublex)

#define _INF_DEFINE 1.0/0.0

intisInf

(doublen)

return

memcmp(&

n,&pinf

,sizeof(n

))==0||

memcmp(&

n,&ninf

,sizeof(n

))==0;}

4樓:Milo Yip

浮點數的話,在 C++11 可使用 std::fetestexcept,但這個「異常」不是指C++那套 try-catch 異常的東西。

一般情況下,如果想要 throw exception,還是在除法前自行檢測然後 throw。

5樓:孤狐無悔

標準做法是,

首先判斷除數是否為零,如果不是則繼續運算。

如果除數是0,且是合法輸入,那麼必定有約定好的輸出,或約定好沒有輸出。

如果是非法輸入,則輸出錯誤資訊,或丟擲異常,或其他約定好的錯誤處理方式。

不應過度依賴異常處理。

c++本身並不會丟擲除零異常,所以必須手動檢查之後手動丟擲異常(如果需要的話)。如果要丟擲異常,可以丟擲invalid_argument,或者自定義異常。

6樓:吶吶啵

除0會觸發硬體異常,這個異常是由作業系統捕捉的。以linux為例,可以註冊相關的signal處理函式,並在其中手動丟擲異常。

補充:還需要配合sigsetjump和siglongjmp來實現。先在try入口處sigsetjump,然後在異常函式內使用siglongjump跳回,並在跳回分支內throw自定義除0異常。

關於c語言的malloc 0xffffffff 的乙個問題???

千年放浪 如 李洋 所說,我在64位機上看到的語法樹解析完的結果如下 sizeof size t 是8。1其實轉換成了 1ull。 malloc的引數是無符號整數size t型別,所以你用0xffffffff做引數,就會預設是正整數,而 1做引數,就會導致錯誤。還有,malloc返回值要顯式轉化,不...

如圖,怎麼用二項式定理證明0的n次方等於0

笨小孩 簡單!當你寫完如下示意的所有步驟時,你就成功地用二項式定理證明了0的n 正整數 次方等於0了 第1步 0 1 1 1 1 1 1 0 第2步 0 2 1 1 2 1 2 1 0 第3步 0 3 1 1 3 1 3 3 1 0 第4步 0 4 1 1 4 1 4 6 4 1 0 第5步 第6步...

C語言,講通過指標引用多維陣列時,講到的a 0 與 (a 0)等價怎麼理解?

位址偏移有什麼難以理解的其實還有0 a a 0 a 0 奇怪的0 a 好像是在 c與指標的書裡有詳細說過 a如果是個陣列的話,單獨使用a這個識別符號代表a的首位址。然後如果是a 0 這樣的寫法,代表引用a陣列的下標為0的元素,也就是取a陣列第乙個元素的值。這個下標為0的元素的位址實際上跟整個陣列a的...