setjmp와 longjmp는 함수를 넘나드는(다른 파일도 되려나?) 점프인데
goto 보다 더 위험한(!) 놈이라 잘 쓰지 않도록 되어 있는 것으로 보인다.
게다가 순수 C 구현이 아닌 OS 지원을 받는 넘이라 시스템 별로 다르게 작동 할지도 모른다고 ㄷㄷㄷ
코드로는 jmp_buf 는 점프할 지점을 저장하는 것이고
sizeof로 해보니 200을 뱉어낸다 ㄷㄷ (Ubuntu 12.04 64bit Edition)
PC(Program Counter) 뿐만 아니라 스택을 저장하는 거라 그런가?
코드상으로는 main()의 setjmp를 수행하는 지점이 돌아올 지점이고
longjmp에서 setjmp로 점프!
여러개의 setjmp로 여러 포인트를 잡아놓고
longjmp로 왔다 갔다 가능해 보이긴 하지만.. 까다로울 듯?
$ cat test.c #include <stdio.h> #include <setjmp.h> jmp_buf pos; void proc() { static int i = 0; ++i; if(i<10) longjmp(pos, i); return; } int main() { int a; a = setjmp(pos); printf("%d\n", a); proc(); return 0; } |
$ ./a.out 0 1 2 3 4 5 6 7 8 9 |
#include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); |
'Programming > C Win32 MFC' 카테고리의 다른 글
printf 가변인자의 비밀? (0) | 2015.06.18 |
---|---|
gcc 컴파일러 -D 옵션 (0) | 2015.05.19 |
inline 함수.. (0) | 2015.05.12 |
혼돈의 카오스 - 교차참조 헤더 (0) | 2015.05.11 |
#ifdef 와 #ifdef ()의 차이 (0) | 2015.04.13 |