مدیریت خطا در زبان C – آموزش زبان C

c error handling 4165 مدیریت خطا در زبان C   آموزش زبان C

مدیریت خطا در زبان C

زبان C به طور مستقیم از مدیریت خطا (Error Handling) پشتیبانی نمی کند اما شما می توانید با استفاده از مقادیر بازگشتی از توابع خطاها را مدیریت کنید. اکثر توابع موجود در زبان C در صورت بوجود آمدن خطا مقدار یا NULL را باز میگردانند و شماره خطا را در متغیر errno تنظیم می کند.  این یک متغیر جهانی است که نشان دهنده بوجود آمدن خطا در هنگام فراخوانی یک تابع است. شماره خطاهای (error code) مختلفی در هدر فایل <error.h> وجود دارد.

بنابراین یک برنامه نویس C می تواند با بررسی مقادیر بازگشتی، خطاهای بوجود آمده را کنترل کند. بهتر است در ابتدا برنامه مقدار متغیر errno را ۰ تنظیم کنید. مقدار ۰ نشان دهنده این است که هیچ خطایی رخ نداده است.

متغیر errno و توابع perror() و strerror()

زبان برنامه نویسی C توابع perror() و strerror() را در اختیار ما قرار می دهد تا با استفاده از آن ها متن خطاها براساس شماره آن ها چاپ کنیم.

  • تابع perror() رشته ای را که به آن داده می شود را چاپ می کند و سپس یک کولون، یک فضای خالی و در آخر هم متن مربوط به خطا را چاپ می کند.
  • تابع strerror() بر اساس شماره خطای رخ داده، یک اشاره گر به متن خطا (یک رشته) باز می گرداند.

در مثال زیر سعی می کنیم فایلی که وجود ندارد باز کنیم. در کد زیر از هر دو تابع فوق استفاده شده است. نکته مهمی که باید به آن توجه کنید این است که همیشه جریان فایل stderr را در تمام خروجی خطاها استفاده کنید.

#include <stdio.h>
#include <errno.h>
#include <string.h>
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;
}

زمانی که کد بالا توسط کامپایلر زبان C و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

خطای تقسیم بر صفر

در هنگام تقسیم اعداد، یک مشکل رایجی که وجود دارد این است که برنامه نویسان بررسی نمی کنند که مخرج کسر صفر نباشد و این موضوع باعث بوجود آمدن خطای زمان اجرا می شود.

در مثال زیر نحوه بررسی این موضوع نشان داده شده است:

#include <stdio.h>
#include <stdlib.h>
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);
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Division by zero! Exiting...

وضعیت خروج برنامه

یک عمل رایج در هنگامی که برنامه با موفقیت کارش را انجام داده است، بازگشت دادن مقدار EXIT_SUCCESS است. این یک ماکرو است که با مقدار ۰ تنظیم شده است. اما زمانی که برنامه شما در انجام کارش دوچار مشکل می شود، مقدار بازگشتی رایج EXIT_FAILURE است. مقدار این ماکرو می باشد.

#include <stdio.h>
#include <stdlib.h>
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);
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Value of quotient : 4

نوشته مدیریت خطا در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *