Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

setjmp() và longjmp() trong C

Ở đây ta xem setjmp và longjmp trong C. Chúng nằm trong thư viện setjmp.h.

setjmp(jmp_buf buf) : dùng buf lưu vị trí hiện tại và trả về 0.
longjmp(jmp_buf buf, i) : quay về vị trí trỏ bởi buf và trả về i.

Dùng trong C để xử lý ngoại lệ (exception handling). setjmp() như khối try, longjmp() như câu lệnh throw. longjmp() chuyển điều khiển về điểm setjmp() trỏ tới.

Ví dụ in số 100 lần không dùng đệ quy, vòng lặp, macro:

Ví dụ

#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;

int main() {
    int x = 1;
    setjmp(buf);
    printf("5");
    x++;
    if (x <= 100)
        longjmp(buf, 1);
    return 0;
}

Kết quả

5555555555555555555555555555555555555555555555555555555555555555555555555555
555555555555555555555555