Cách sử dụng câu lệnh Try Catch trong C

Cach Su Dung Cau Lenh Try Catch Trong C



Các từ “thử” và “bắt” mô tả những việc cần làm khi một chương trình gặp ngoại lệ do vấn đề về mã hoặc dữ liệu. Các ngoại lệ được xử lý trong một thử khối mã. Các khối bắt được sử dụng để tìm và xử lý các ngoại lệ từ các khối thử. Nhiều ngôn ngữ lập trình, bao gồm Python, C ++ và JavaScript, bao gồm cố gắng bắt các câu lệnh.

Bài viết này giải thích câu lệnh try-catch là gì và nó được triển khai như thế nào bằng một ví dụ trong lập trình C.

Câu lệnh Try Catch là gì?

Các thử câu lệnh xác định một tập hợp các câu lệnh có thể tạo ra một ngoại lệ. Khi một loại ngoại lệ cụ thể xảy ra, khối catch là nơi ngoại lệ được gửi đi. Trình biên dịch sẽ đưa ra một thông báo lỗi hoặc ngoại lệ sẽ tiếp tục di chuyển lên ngăn xếp cuộc gọi cho đến khi nó được giải quyết nếu khối try/catch không xử lý được.







Cú pháp chung của cố gắng bắt tuyên bố được đưa ra như:



thử {
/*
Chèn một số mã có thể sẽ tạo ra lỗi
*/
}
nắm lấy {
/*
Viết mã xử lý lỗi phát sinh.
*/
}

Câu lệnh try-catch trong C là gì?

C không hỗ trợ xử lý ngoại lệ và không có một cơ chế tích hợp để làm như vậy. Tuy nhiên, bạn có thể mô phỏng điều này ở một mức độ nào đó bằng cách sử dụng setjmp longjmp các cuộc gọi. Không có cách giải phóng bộ nhớ sau khi ngăn xếp đã được truy cập, các cơ chế xử lý ngoại lệ sẽ không hiệu quả và không an toàn, đồng thời C không có bộ thu gom rác. Để giải phóng RAM, chúng tôi cũng có thể cần tích hợp trình quản lý bối cảnh.



Bây giờ, khi chúng tôi thực hiện các cải tiến về mã, chúng tôi sẽ dần dần xây dựng một giải pháp. Longjmp và setjmp, là hai hàm C có thể được cung cấp bởi tệp tiêu đề setjmp.h sẽ được chúng tôi sử dụng. Hàm setjmp chấp nhận các biến kiểu jmp_buf và trả về 0 khi nó được gọi trực tiếp. Khi cùng một biến jmp_buf được sử dụng để gọi longjmp với hai biến, hàm setjmp trả về một giá trị khớp với giá trị của đối số thứ hai của longjmp.





Một ví dụ về việc thực hiện trên được đưa ra như sau:

#include
#include
#define THỬ làm { jmp_buf buf_state; nếu ( !setjmp(buf_state)) {
#define BẮT ĐẦU } khác {
#define KẾT THÚC }} while(0)
#define NÉM longjmp(buf_state, 1)
int chính ( )
{
THỬ {
bản inf ( 'Hãy thử kiểm tra tuyên bố \N ' ) ;
NÉM;
bản inf ( 'Câu lệnh không được xuất hiện, vì khối THROW đã ném ngoại lệ \N ' ) ;
}
NẮM LẤY {
bản inf ( 'Có ngoại lệ \N ' ) ;
}
NHẬP KHẨU;
trở lại 0 ;
}

Trong chương trình C trên, NHẬP KHẨU chức năng được sử dụng để cung cấp phần đóng của khối do-while.



Phần kết luận

Nếu một chương trình gặp phải ngoại lệ do lỗi dữ liệu hoặc mã hóa khi đang chạy, “ thử ' Và ' nắm lấy ” mô tả làm thế nào để quản lý nó. trong một thử khối mã, ngoại lệ xảy ra trong khi một nắm lấy khối là nơi lỗi từ thử khối được tìm thấy và xử lý. Nhiều ngôn ngữ lập trình hỗ trợ cố gắng bắt chặn nhưng C thì không. Hướng dẫn này mô tả phương pháp sử dụng câu lệnh try-catch trong lập trình C.