Mercurial > hg > Members > kaito > longjump
view pointer_longjump.c @ 5:4e7858590985
remove malloc , free and include<stdlib.h>
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 Nov 2013 23:31:02 +0900 |
parents | d75a89b10176 |
children | 509523ee1e27 |
line wrap: on
line source
#include <stdio.h> #include <setjmp.h> __code code1(int n,__code(*__return)(int,void *,int *),void *__environment,int *__ret_p){ printf("code1 : code entry1\n"); goto __return(n,__environment,__ret_p); } __code return1 (int n,void* env,int* __ret_p){ printf("return1 : __return entry\n"); *__ret_p = n; longjmp(*(jmp_buf*)env,1); } int main1 (){ __code (*__return)(); void *__environment ; int retval; int *__ret_p; jmp_buf j_buf; __ret_p = &retval; printf("main1 : main1 entry\n"); __environment = &j_buf; if (setjmp(__environment)){ printf("main1 : main1 return\n"); return retval; } __return = return1; goto code1(30,__return,__environment,__ret_p); return 0; } int main (){ int n; n = main1(); printf("returned\n"); printf("return = %d\n",n); return 1; }