/*
 * main.c
 *
 *  Created on: Oct 29, 2010
 *      Author: jenson
 */

#include
#include

jmp_buf ebuf;
void fun(void);
int main(){

    int i;
    printf("1 ");
    i = setjmp(ebuf);
    if(i == 0){
        fun();
        printf("this will not be printed.\n");
    }
    printf("%d\n",i);
    return 0;
}

void fun(void){
    printf("3 ");
    longjmp(ebuf,5);
}

宏函数setjmp在缓冲区ebuf中保存了系统堆栈内容,以供函数longjmp以后使用。调用宏函数setjmp时,返回值为零。然后函数longjmp把一个变元传递给setjmp()函数,该值(恒为非零)就是调用longjmp后出现的setjmp值。