/********************************************************************* * Linux setjmp longjmp * 说明: * 最近在看cmockery源代码的时候发现setjmp和longjmp函数,于是查了 * 相关的内容,发现真是个好东西,可以完成函数之间的直接跳转。 * * 2016-5-7 深圳 南山平山村 曾剑锋 ********************************************************************/ 一、参考文章: 1. C 语言中 setjmp 和 longjmp http://www.cnblogs.com/hazir/p/c_setjmp_longjmp.html 2. setjmp(3) - Linux man page http://linux.die.net/man/3/setjmp 二、Demo: #include <stdio.h> #include <stdlib.h> #include <setjmp.h> int main(int argc, char *argv) { jmp_buf env; int i; i = setjmp(env); printf("i = %d.\n", i); printf("check position for exit before.\n"); if ( i != 0 ) exit(0); printf("check position for exit after.\n"); longjmp(env, 2); printf("This line does not get printed.\n"); } 三、结果: myzr@myzr:~/c_program$ ./a.out i = 0. check position for exit before. check position for exit after. i = 2. check position for exit before. myzr@myzr:~/c_program$