欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

淺析C語(yǔ)言中的setjmp與longjmp函數(shù)

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

setjmp和longjmp是C語(yǔ)言獨(dú)有的,只有將它們結(jié)合起來(lái)使用,才能達(dá)到程序控制流有效轉(zhuǎn)移的目的,按照程序員的預(yù)先設(shè)計(jì)的意圖,去實(shí)現(xiàn)對(duì)程序中可能出現(xiàn)的異常進(jìn)行集中處理。

先來(lái)看一下這兩個(gè)函數(shù)的定義吧:

setjmp和longjmp的函數(shù)原型在setjmp.h中

函數(shù)原型:
int setjmp(jmp_buf envbuf);

setjmp函數(shù)用緩沖區(qū)envbuf保存系統(tǒng)堆棧的內(nèi)容,以便后續(xù)的longjmp函數(shù)使用。setjmp函數(shù)初次啟用時(shí)返回0值。

void longjmp(jmp_buf envbuf, int val);

longjmp函數(shù)中的參數(shù)envbuf是由setjmp函數(shù)所保存的堆棧環(huán)境,參數(shù)val設(shè)置setjmp函數(shù)的返回值。longjmp函數(shù)本身是沒(méi)有返回值的,它執(zhí)行后跳轉(zhuǎn)到保存envbuf參數(shù)的setjmp函數(shù)調(diào)用,并由setjmp函數(shù)調(diào)用返回,此時(shí)setjmp函數(shù)的返回值就是val。

上面的說(shuō)明有點(diǎn)拗口,通俗的解釋是:先調(diào)用setjmp,用變量envbuf記錄當(dāng)前的位置,然后調(diào)用longjmp,返回envbuf所記錄的位置,并使setjmp的返回值為val。當(dāng)時(shí)用longjmp時(shí),envbuf的內(nèi)容被銷毀了。其實(shí)這里的“位置”一詞真正的含義是棧定指針。

接著讓我們看一個(gè)小例子吧:

復(fù)制代碼 代碼如下:

#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;

banana(){
    printf("in banana() \n");
    longjmp(buf,1);

    printf("you'll never see this,because i longjmp'd");

}

main()
{
    if(setjmp(buf))
        printf("back in main\n");
    else{
        printf("first time through\n");
        banana();
    }

}


這段代碼的打印結(jié)果是:
first time through
in banana()
back in main

仔細(xì)看一下應(yīng)該更能體會(huì)這對(duì)函數(shù)的作用了吧。

setjmp/longjmp的最大用處是錯(cuò)誤恢復(fù),類似try ...catch...

他們的功能比goto強(qiáng)多了,goto只能在函數(shù)體內(nèi)跳來(lái)跳去,而setjmp/longjmp可以在到過(guò)的所有位置間。

上一篇:一道超經(jīng)典的C++結(jié)構(gòu)體的題目

欄    目:C語(yǔ)言

下一篇:二叉搜索樹(shù)的插入與刪除(詳細(xì)解析)

本文標(biāo)題:淺析C語(yǔ)言中的setjmp與longjmp函數(shù)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4203.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有