我是靠谱客的博主 虚拟薯片,最近开发中收集的这篇文章主要介绍setjmp和longjmp函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

setjmp和longjmp的函数原型在setjmp.h中。
函数原型:
int setjmp(jmp_buf envbuf);
setjmp函数用缓冲区envbuf保存系统堆栈的内容,以便后续的longjmp函数使用。setjmp函数初次启用时返回0值。
 
void longjmp(jmp_buf envbuf, int val);
longjmp函数中的参数envbuf是由setjmp函数所保存的堆栈环境,参数val设置setjmp函数的返回值。longjmp函数本身是没有返回值的,它执行后跳转到保存envbuf参数的setjmp函数调用,并由setjmp函数调用返回,此时setjmp函数的返回值就是val。
 
调用longjmp函数时不能使setjmp函数返回0,如果val为0,则setjmp函数返回1。longjmp函数从来不返回,因为它调用后就跳转到setjmp函数保存的堆栈处,恢复堆栈开始执行,所以longjmp函数不会返回。
 
setjmp和longjmp函数使用示例:
#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
int main()
{
    int b;
    b = 3;
 
    if (setjmp(buf) != 0) 
    {
        printf("b=%d/n", b); 
        return 0;
    }
    b = 5;
    longjmp(buf, 1);
 
    return 0;
}
setjmp 执行时返回0,执行 b 等于 5 ,调用 longjmp ,跳转到 setjmp 调用, setjmp 返回 1 ,打印 b=5  

最后

以上就是虚拟薯片为你收集整理的setjmp和longjmp函数的全部内容,希望文章能够帮你解决setjmp和longjmp函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部