Mercurial > hg > Members > kaito > longjump
view struct_longjump.c @ 8:a7c771f554e7
remove #include but warnings were not removed
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 01 Dec 2013 20:23:27 +0900 |
parents | c49bf9e28ea8 |
children | 3f7c32b23851 |
line wrap: on
line source
int setjmp(int*); int longjmp(int*,int); int printf(const char*,...); struct CbC_env { void *ret_p,*env; }; __code code1(int n,__code(*__return)(int,void *),void *__environment){ printf("code1 : code entry1\n"); goto __return(n,__environment); } __code return1 (int n,void* env){ printf("return1 : __return entry\n"); *(int*)((struct CbC_env *)(env))->ret_p = n; longjmp((int*)(((struct CbC_env *)env)->env),1); } int main1 (){ __code (*__return)(); struct CbC_env __environment; int i_buf[128]; int retval; __environment.ret_p = &retval; __environment.env = &i_buf; printf("main1 : main1 entry\n"); if (setjmp(__environment.env)){ printf("main1 : main1 return\n"); return *((int *)__environment.ret_p); } __return = return1; goto code1(30,__return,&__environment); return 0; } int main (){ int n; n = main1(); printf("returned\n"); printf("return = %d\n",n); return 1; }