您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如果c語言沒有try catch怎么辦?,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
setjmp與longjmp
后綴jmp指的就是jump,關(guān)看名字就能猜到這哥倆是干啥的了。使用他們倆就可以讓程序控制流轉(zhuǎn)移,進(jìn)而實(shí)現(xiàn)對(duì)異常的處理。
異常處理的結(jié)構(gòu)可以劃分為以下三個(gè)階段:
過程有點(diǎn)類似遞歸,只有文字你可能看的有點(diǎn)云里霧里,我們結(jié)合一個(gè)小例子來看看
#include <stdio.h> #include <setjmp.h> static jmp_buf buf; void second(void) { printf("second\n"); // 跳回setjmp的調(diào)用處 - 使得setjmp返回值為1 longjmp(buf, 1); } void first(void) { second(); //這行到不了,因?yàn)閟econd里面longjmp已經(jīng)跳轉(zhuǎn)回去了 printf("first\n"); } int main() { int rc; rc = setjmp(buf); if (rc==0) { // 進(jìn)入此行前,setjmp返回0 first(); } // longjmp跳轉(zhuǎn)回,setjmp返回1,因此進(jìn)入此行 else if(rc==1){ printf("main\n"); } return 0; } /* the ressult as: second main */
現(xiàn)在我們?cè)賮砜纯磧蓚€(gè)函數(shù)的聲明:
當(dāng)然你也可以用switch
代替上面的if else
,其實(shí)try catch就相當(dāng)于上面的那個(gè)函數(shù)你可以參考這個(gè)實(shí)現(xiàn)try catch。
signal信號(hào)處理
個(gè)人覺得這個(gè)在linux下更好用,并且也提供了更多的信號(hào)量宏。
下面給出的是signal頭文件中的定義
#define SIGINT 2 // interrupt #define SIGILL 4 // illegal instruction - invalid function image #define SIGFPE 8 // floating point exception #define SIGSEGV 11 // segment violation #define SIGTERM 15 // Software termination signal from kill #define SIGBREAK 21 // Ctrl-Break sequence #define SIGABRT 22 // abnormal termination triggered by abort call
這里僅給出維基上的例子
#include <signal.h> #include <stdio.h> #include <stdlib.h> static void catch_function(int signal) { puts("Interactive attention signal caught."); } int main(void) { if (signal(SIGINT, catch_function) == SIG_ERR) { fputs("An error occurred while setting a signal handler.\n", stderr); return EXIT_FAILURE; } puts("Raising the interactive attention signal."); if (raise(SIGINT) != 0) { fputs("Error raising the signal.\n", stderr); return EXIT_FAILURE; } puts("Exiting."); return 0; }
關(guān)于如果c語言沒有try catch怎么辦?就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。