首页 > 代码库 > Linux环境编程之进程(三):函数间跳转
Linux环境编程之进程(三):函数间跳转
引言:在编写程序时,经常在函数内部使用goto语句来跳转,从而进行出错处理,那么如果想要在函数之间进行跳转该怎么做呢?使用setjmp和longjmp函数。
给出示例程序:
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。