
Từ khóa "try" và "catch" mô tả cách xử lý khi chương trình gặp ngoại lệ do lỗi code hoặc dữ liệu. Nhiều ngôn ngữ (Python, C++, JavaScript) hỗ trợ try-catch tích hợp. C không hỗ trợ xử lý ngoại lệ và không có cơ chế built-in. Tuy nhiên, có thể mô phỏng bằng setjmp và longjmp (header setjmp.h).
setjmp nhận biến kiểu jmp_buf, trả về 0 khi gọi trực tiếp. Khi longjmp được gọi với cùng jmp_buf và giá trị thứ hai, setjmp trả về giá trị đó.
Mô phỏng Try-Catch bằng Macro
#include <stdio.h>
#include <setjmp.h>
#define TRY do { jmp_buf buf_state; if (!setjmp(buf_state)) {
#define CATCH } else {
#define ENDTRY }} while(0)
#define THROW longjmp(buf_state, 1)
int main() {
TRY {
printf("Try statement testing\n");
THROW;
printf("Statement should not appear, as the THROW block has already thrown the exception \n");
}
CATCH {
printf("Got Exception \n");
}
ENDTRY;
return 0;
}
Trong đó ENDTRY đóng khối do-while.

Kết luận
C không có try-catch built-in. Hướng dẫn này trình bày phương pháp mô phỏng bằng setjmp/longjmp và macro để xử lý ngoại lệ trong C.
Tác giả

Komal Batool Batool
Đam mê nghiên cứu công nghệ, tập trung viết về ngôn ngữ lập trình và khoa học máy tính.