1 #include <setjmp.h> 2 #define T(t) (t*)0; f()3static void f() 4 { 5 T(jmp_buf) 6 {void(*p)(jmp_buf,int) = longjmp;} 7 #ifdef setjmp 8 {int x = setjmp((jmp_buf){0});} 9 #else 10 {int(*p)(jmp_buf) = setjmp;} 11 #endif 12 #ifdef _POSIX_C_SOURCE 13 T(sigjmp_buf) 14 {void(*p)(sigjmp_buf,int) = siglongjmp;} 15 #ifdef sigsetjmp 16 {int x = sigsetjmp((sigjmp_buf){0}, 0);} 17 #else 18 {int(*p)(sigjmp_buf,int) = sigsetjmp;} 19 #endif 20 #endif 21 #if defined _XOPEN_SOURCE && defined OBSOLETE 22 {void(*p)(jmp_buf,int) = _longjmp;} 23 #ifdef _setjmp 24 {int x = _setjmp((jmp_buf){0});} 25 #else 26 {int(*p)(jmp_buf) = _setjmp;} 27 #endif 28 #endif 29 } 30