Linux 函数跳转到定义,Linux环境编程之历程(三):函数间跳转

Linux环境编程之进程(三):函数间跳转

引言:在编写程序时,经常在函数内部使用goto语句来跳转,从而进行出错处理,那么如果想要在函数之间进行跳转该怎么做呢?使用setjmp和longjmp函数。

给出示例程序:

#include

#include

#include

static void f1(int, int, int, int);

static void f2(void);

static jmp_buf jmpbuffer;

static int globval;

int

main(void)

{

int autoval;

register int regival;

volatile int volaval;

static int statval;

globval = 1;

autoval = 2;

regival = 3;

volaval = 4;

statval = 5;

if(setjmp(jmpbuffer) != 0){

printf("after longjmp:\n");

printf("global = %d, autoval = %d, regival = %d, volaval = %d, statval = %d\n",

globval, autoval, regival, volaval, statval);

exit(0);

}

/*

* Change variable after setjmp, buf before longjmp.

*/

globval = 95;

autoval = 96;

regival = 97;

volaval = 98;

statval = 99;

f1(autoval, regival, volaval, statval);/*never returns*/

exit(0);

}

static void

f1(int i, int j, int k, int l)

{

printf("in f1():\n");

printf("global = %d, autoval = %d, regival = %d, volaval = %d, statval = %d\n",

globval,i, j, k, l);

f2();

}

static void

f2(void)

{

longjmp(jmpbuffer, 1);

}

编译程序测试结果:

in f1():

global = 95, autoval = 96, regival = 97, volaval = 98, statval = 99

after longjmp:

global = 95, autoval = 96, regival = 97, volaval = 98, statval = 99

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值