c++例外處理的問題 |
尚未結案
|
kitsam
一般會員 發表:13 回覆:11 積分:4 註冊:2005-02-06 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
kitsam
一般會員 發表:13 回覆:11 積分:4 註冊:2005-02-06 發送簡訊給我 |
謝謝你的回應
我的意思是說在C++中就錯誤,也要我自己去判斷,然後又是我去拋出例外,如下Code:
try { int a=1,b=0; int c=a/b; cout< |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 謝謝你的回應 我的意思是說在C 中就錯誤,也要我自己去判斷,然後又是我去拋出例外,如下Code:其實Java和C 在處理例外方面是差不多的(反正這幾種高階語言都很像), Java有的C 九成九都有, 在BCB裡除0的例外為EDivByZero, Help裡說明為EDivByZero is the exception class for integer divide-by-zero errors.try { int a=1,b=0; int c=a/b; cout< void __fastcall TForm1::Button1Click(TObject *Sender) { try { int a = 1, b = 0; int c = a / b; } catch(const EDivByZero &e) { ShowMessage("錯誤訊息: " e.Message); } } 在Java裡用catch(Exception ex)抓取所有例外, 在C 你可以用...代表所有的例外 void __fastcall TForm1::Button2Click(TObject *Sender) { try { int a = 1, b = 0; int c = a / b; } catch(...) { ShowMessage("錯誤"); } }發表人 - zard 於 2005/02/07 10:35:48 發表人 - zard 於 2005/02/07 10:46:19 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
kitsam
一般會員 發表:13 回覆:11 積分:4 註冊:2005-02-06 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
有關c exception的討論去年在c moderated討論區有很多精闢的文章
如果用google的討論區找尋可以看到記錄。 就我所記得的,c 中的catch(...)不保證能抓到系統類型的錯誤,
這不只是在Windows系統上,在Linux上...也都有這個問題。其中
的原因有許多,不過最主要是因為c 本身設計就不是只針對單一平
台或系統,因此面對系統定義的錯誤...只好由自已來處理,不建議
用catch(...)來面對。以console的例子來說,如果要抓到windows的系
統錯誤,可以使用vcl的錯誤處理。至於不同的平台,就自已要去找解
決方法了。另外c 本身的exception還有不少缺點,尤其不支援unicode。(vcl的也不支援)這點還是沒有比較好的解決方法.... 因此exception在c 中,能不丟出就不丟。如果丟出的exception無法
解決,就不catch。所以除非是程式已經無法運作的情況下,不得已才丟exception。 這個概念下,catch(...)是最不建議用的。因為在不知道錯誤類型下,
無法保證能夠處理錯誤的原因。比如要是CPU的運算已經出問題,連1加1
都算不好了,再執行任何的程式碼都沒有益處。這種情況下選擇不作catch
,讓程式早點terminate才是上上之策。 不過..BCB中有c 又有delphi的影子。delphi的錯誤處理概念,我個人覺
得和c又不太一樣。像Indy中就大方的使用Exception作訊息的傳遞,就連
Connection Closed Gracefully也用Exception來傳...真的是很特別吧.
很少看到有函式庫是這麼設計的..(應該也是我少見多怪) 一點短見..提供參考
|
kitsam
一般會員 發表:13 回覆:11 積分:4 註冊:2005-02-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |