setjmp와 longjmp는 함수를 넘나드는(다른 파일도 되려나?) 점프인데
goto 보다 더 위험한(!) 놈이라 잘 쓰지 않도록 되어 있는 것으로 보인다.
게다가 순수 C 구현이 아닌 OS 지원을 받는 넘이라 시스템 별로 다르게 작동 할지도 모른다고 ㄷㄷㄷ
코드로는 jmp_buf 는 점프할 지점을 저장하는 것이고
sizeof로 해보니 200을 뱉어낸다 ㄷㄷ (Ubuntu 12.04 64bit Edition)
PC(Program Counter) 뿐만 아니라 스택을 저장하는 거라 그런가?
$ 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 |
