1. 如何用c語言實現異常/狀況處理機制
反對,不會顯示你的姓名
余天升網路安全、密碼學、編程語言、編程話題優秀回答者 …
2 人贊同
在沒有垃圾回收的情況下,使用異常機制絕對會降低程序的質量。Symbian C++中,使用了一種Leave機制,是對C++中異常機制的包裝,而且因為Symbian系統運行在資源有限的嵌入式設備上的原因,棧空間很小,幾乎所有的數據都要放在堆上,所以Symbian C++中引入了… 顯示全部
在沒有垃圾回收的情況下,使用異常機制絕對會降低程序的質量。Symbian C++中,使用了一種Leave機制,是對C++中異常機制的包裝,而且因為Symbian系統運行在資源有限的嵌入式設備上的原因,棧空間很小,幾乎所有的數據都要放在堆上,所以Symbian C++中引入了清除棧機制來避免內存泄漏的問題。
Symbian C++中要求,剛創建的對象,在沒有保存到別的對象之前,應該立刻放到清除棧中保存,以便一旦產生Leave(異常),系統可以將清除棧中的對象銷毀,防止內存泄漏。於是這樣子代碼就好麻煩了,每一次都要寫類似的代碼
HSomeClass* anInstance = HSomeClass.NewL();
CleanupStack::PushL(anInstance);
HSomeOtherClass* aNewInstance = HSomeOtherClass.NewL();
CleanupStack::PushL(aNewInstance);
.......
CleanupStack::Pop();
return;
所以,如果你想在C中使用異常機制的話,那麼你需要:包裝把setjump包裝成TRAP宏,然後在實現一個清除棧。這個清除棧要分類型,一般的數據是一種,句柄又是一種,C中還不好實現類似IDispose之類的介面。另外,Symbian沒落的一個原因是,這樣的機制過於復雜,好多人都搞不懂,還是負責垃圾回收的Java比較方便,詳見另外一則答案 http://www.hu.com/question/20304750/answer/14686650 。
2. C語言編譯錯誤如何解決
C語言編譯錯誤如何解決,
辦法就是逐條分析編譯錯誤提示輸出的信息,並按照提示修改,
沒有捷徑,只能一條條地把編譯出錯的地方修改掉。
建議從前往後改,因為有可能後面的錯誤都是第一條的錯誤引起的。
所以可以改完幾條就重新編譯下,看修改的地方是否通過編譯了。
如此循環,直到消除所有的錯誤。
請採納,謝謝
3. 文件中C語言出現錯誤,該如何解決
C語言中大部分錯誤是語法錯誤,語法總結如下。
4. c語言未經處理的異常,求大佬指點
您好,很高興回答您的問題。
您的這個題目,系統已經很明顯告訴您了錯誤的原因。因為您定義的x為字元型數據,那麼它對應的輸入輸出格式符為%c,但是您在輸入語句中寫的是%s,是字元串格式,不符合字元型單個變數的輸入輸出。根據題目意思,應該是要輸入字元串,那麼定義的時候就要寫成charx[2],因為存放的是性別中文字,所以數組長度定義為2就可以了。您再試試哦。
5. c語言程序異常終止
#include<stdio.h>
voidmain(){
printf("——黃英來到由唐明明編譯的學生成績系統—— ");
intrs,km;
printf("請定義學生人數:");
scanf("%d",&rs);
printf("請定義科目數:");
scanf("%d",&km);
charsubject[10][10];
for(inti=0;i<km;i++){
printf("請輸入第%d課科目名稱:",i+1);
scanf("%s",subject[i]);
}
charname[100][20];
doublescore[100][10];
for(intm=0;m<rs;m++){
printf("請輸入第%d為學生姓名:",m+1);
scanf("%s",name[m]);//運行到這兒程序就異常終止
for(intn=0;n<km;n++){
printf("請輸入%s的%成績",name[m],subject[n]);
scanf("%lf",&score[m][n]);
}
}
}
6. c語言異常怎麼捕獲有幾種方式
C語言沒有異常這一說,請自行進行合法性的判斷。
1.使用標准C庫提供了abort()和exit()兩個函數,強行終止程序的運行,<stdlib.h>。
2.使用assert(斷言)宏調用,<assert.h>。
3.使用errno全局變數,<errno.h>。
4.使用goto跳轉。
5.使用setjmp,longjmp跳轉。