C 語言基礎(chǔ)教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結(jié)構(gòu)體

C 語言文件

C 其他

C 語言參考手冊

C 庫宏 setjmp() 使用方法及示例

C 標(biāo)準(zhǔn)庫 - <setjmp.h>

C 庫宏 int setjmp(jmp_buf environment) :創(chuàng)建本地的jmp_buf緩沖區(qū)并且初始化,用于將來跳轉(zhuǎn)回此處。這個(gè)子程序保存程序的調(diào)用環(huán)境于env參數(shù)所指的緩沖區(qū),env將被longjmp使用。如果是從setjmp直接調(diào)用返回,setjmp返回值為0。如果是從longjmp恢復(fù)的程序調(diào)用環(huán)境返回,setjmp返回非零值。

聲明

下面是 setjmp() 宏的聲明。

int setjmp(jmp_buf environment)

參數(shù)

  • environment -- 這是一個(gè)類型為 jmp_buf 的用于存儲環(huán)境信息的對象。

返回值

這個(gè)宏可能不只返回一次。第一次,在直接調(diào)用它時(shí),它總是返回零。當(dāng)調(diào)用 longjmp 時(shí)帶有設(shè)置的環(huán)境信息,這個(gè)宏會(huì)再次返回,此時(shí)它返回的值會(huì)傳給 longjmp 作為第二個(gè)參數(shù)。

在線示例

下面的示例演示了 setjmp() 宏的用法。

#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void second(void) {
    printf("second\n");         // 打印
    longjmp(buf,1);             // 跳回setjmp的調(diào)用處 - 使得setjmp返回值為1
}
 
void first(void) {
    second();
    printf("first\n");          // 不可能執(zhí)行到此行
}
 
int main() {   
    if ( ! setjmp(buf) ) {
        first();                // 進(jìn)入此行前,setjmp返回0
    } else {                    // 當(dāng)longjmp跳轉(zhuǎn)回,setjmp返回1,因此進(jìn)入此行
        printf("main\n");       // 打印
    }
 
    return 0;
}

讓我們編譯并運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:

second
main

C 標(biāo)準(zhǔn)庫 - <setjmp.h>

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清