مدیریت خطا (Error Handling)
مدیریت خطا یعنی تشخیص و واکنش به خطاها. خطا (Error) مشکلی است که برنامه را متوقف می کند یا نتیجه اشتباه می دهد. در C استثنا (Exception) نداریم؛ بنابراین با مقدار بازگشتی، errno، و توابعی مثل perror() و strerror() کار می کنیم.
روش های مدیریت خطا در C
رایج ترین روش، بررسی مقدار بازگشتی است. مثلاً fopen() در خطا «NULL» می دهد. سپس پیام بده و مسیر ایمن را ادامه بده.
#include <stdio.h>
int main() {
FILE *fptr = fopen("nothing.txt", "r");
if (fptr == NULL) {
printf("Error opening file.\n");
return 1;
}
fclose(fptr);
return 0;
}
جزئیات بیشتر با perror()
تابع perror() پیام دلخواهت را چاپ می کند و سپس توضیح خطای سیستم را اضافه می کند.
#include <stdio.h>
int main() {
FILE *f = fopen("nothing.txt", "r");
if (f == NULL) {
perror("Error opening file");
return 1;
}
fclose(f);
return 0;
}
پیام خوانا با strerror() و errno
errno کد آخرین خطاست. با <errno.h> و strerror(errno) یک متن قابل خواندن می گیری.
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *f = fopen("nothing.txt", "r");
if (f == NULL) {
printf("Error: %s\n", strerror(errno));
return 1;
}
fclose(f);
return 0;
}
خروج ایمن با exit()
وقتی خطا جدی است، با exit() فوراً خارج شو. صفر یعنی موفق؛ غیرصفر یعنی خطا.
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f = fopen("nothing.txt", "r");
if (f == NULL) {
perror("Could not open file");
exit(EXIT_FAILURE);
}
fclose(f);
return EXIT_SUCCESS;
}
نکته: برای آشنایی با اشاره گر تهی، صفحه مقدار NULL را ببین. همچنین برای ردیابی خطاها، بخش دیباگ مفید است.
برای مرور «مدیریت خطا» هنگام اعتبارسنجی ورودی، ادامه مسیر را در اعتبارسنجی ورودی دنبال کن.
گام های عملی سریع
- اول مقدار بازگشتی را بررسی کن.
- در خطا پیام واضح چاپ کن.
- در صورت نیاز فوراً exit() کن.
جمع بندی سریع
- مدیریت خطا از کرش جلوگیری می کند.
- perror و strerror پیام خوانا می دهند.
- errno کد خطا را نگه می دارد.
- exit کد وضعیت مناسب برمی گرداند.