Xử lý lỗi trong C không cung cấp hỗ trợ trực tiếp, nhưng C là ngôn ngữ lập trình hệ thống nên nó cung cấp cho bạn quyền truy cập ở mức thấp hơn dưới dạng giá trị trả về. Hầu hết các hàm trong C hoặc Unix trả về -1 hoặc NULL trong trường hợp có lỗi và thiết lập một mã lỗi. Nó được thiết lập như là một biến toàn cầu và chỉ ra một lỗi xảy ra trong bất kỳ cuộc gọi hàm nào. Bạn có thể tìm thấy nhiều mã lỗi được xác định trong tệp tiêu đề <error.h>.
Vì vậy, một lập trình viên C có thể kiểm tra các giá trị trả về và có thể thực hiện hành động thích hợp tùy thuộc vào giá trị trả lại. Giá trị 0 cho biết không có lỗi trong chương trình.
Ngôn ngữ lập trình C cung cấp các hàm perror () và strerror () có thể được sử dụng để hiển thị tin nhắn văn bản được liên kết với errno.
Hàm perror () hiển thị chuỗi bạn truyền vào nó, theo sau là dấu hai chấm, dấu cách và sau đó là biểu diễn văn bản của giá trị errno hiện tại.
Hàm strerror () trả về một con trỏ tới biểu diễn văn bản của giá trị errno hiện tại.
Hãy thử mô phỏng một điều kiện lỗi và cố gắng mở một tệp không tồn tại. Ở đây tôi đang sử dụng cả hai hàm để hiển thị mức sử dụng, nhưng bạn có thể sử dụng một hoặc nhiều cách để in lỗi của mình. Điểm quan trọng thứ hai cần lưu ý là bạn nên sử dụng luồng tệp stderr để xuất tất cả các lỗi.
#include
#include
#include
extern int errno ;
int main () {
FILE * pf;
int errnum;
pf = fopen ("unexist.txt", "rb");
if (pf == NULL) {
errnum = errno;
fprintf(stderr, "Value of errno: %d\n", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
} else {
fclose (pf);
}
return 0;
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory
Đó là một vấn đề phổ biến mà tại thời điểm phân chia bất kỳ số nào, các lập trình viên không kiểm tra xem một ước số là số không và cuối cùng nó tạo ra một lỗi thời gian chạy.
Mã bên dưới khắc phục điều này bằng cách kiểm tra xem số chia là số không trước khi chia:
#include
#include
main() {
int dividend = 20;
int divisor = 0;
int quotient;
if( divisor == 0){
fprintf(stderr, "Division by zero! Exiting...\n");
exit(-1);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );
exit(0);
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Division by zero! Exiting...
Đó là một thực tế phổ biến để thoát với giá trị EXIT_SUCCESS trong trường hợp chương trình sắp ra sau một hoạt động thành công. Ở đây, EXIT_SUCCESS là một macro và nó được định nghĩa là 0.
Nếu bạn có một điều kiện lỗi trong chương trình của bạn và bạn đang sắp ra sau đó bạn nên thoát ra với một trạng thái EXIT_FAILURE được định nghĩa là -1. Vì vậy, hãy viết chương trình trên như sau:
#include
#include
main() {
int dividend = 20;
int divisor = 5;
int quotient;
if( divisor == 0) {
fprintf(stderr, "Division by zero! Exiting...\n");
exit(EXIT_FAILURE);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );
exit(EXIT_SUCCESS);
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Value of quotient : 4
Tài liệu C liên quan khác bạn nên đọc: