Latest web development tutorials

C معالجة خطأ

لغة C لا توفر الدعم المباشر لمعالجة الأخطاء، ولكن كلغة برمجة نظم، تقوم بإرجاع قيمة لها شكل يسمح لك للوصول إلى البيانات الأساسية. عند حدوث خطأ، فإن معظم استدعاء دالة UNIX أو C يعود 1 أو فارغة، ورمز خطأ أيضا تعيينerrno، رمز الخطأ هذا هو المتغير العالمي، وأعرب خلال خطأ استدعاء دالة حدث.يمكنك العثور على مجموعة متنوعة من رموز الخطأ <error.h> ملف الرأس.

لذلك، يمكن المبرمجين C عودة القيم عن طريق فحص ما الإجراءات المناسبة ومن ثم اتخاذ القرارات على أساس قيمة الإرجاع. يجب أن المطورين في التهيئة البرنامج، تعيين errno إلى 0، وهو ممارسة البرمجة الجيدة. قيمة 0 إلى أن البرنامج أية أخطاء.

errno، perror () وstrerror ()

توفر لغة Cperror () وظيفة strerror ()لعرض الرسائل النصية المرتبطةerrno.

  • وظيفةperror () لإظهار تمرير الخاص بك سلسلة لها، متبوعا بنقطتين، والفضاء، وتمثيل النص من قيمة errno الحالية.
  • strerror () ترجع مؤشر إلى القيمة الحالية للتمثيل النص errno.

دعونا محاكاة قضية كاذبة، ومحاولة لفتح ملف غير موجود. يمكنك استخدام العديد من الطرق لإخراج رسالة خطأ، وهنا علينا استخدام وظيفة للتدليل على استخدام. شيء آخر أن نلاحظ، يجب عليك استخدام تيارستدير ملف الإخراج إلى كافة الأخطاء.

#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, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: 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, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

除数为 0 退出运行...

وضع برنامج للخروج

في ظل الظروف العادية، فإن التنفيذ الناجح للبرنامج بعد وقت عملية عادية خروج مع EXIT_SUCCESS قيمة. هنا، EXIT_SUCCESS الكلي، الذي يعرف بأنه 0.

إذا كان هناك خطأ في البرنامج، عند إنهاء البرنامج، سوف تحمل EXIT_FAILURE قيمة الحالة، يتم تعريفه كما -1. ولذلك، فإن الإجراءات المذكورة أعلاه يمكن أن تكون مكتوبة على النحو التالي:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

quotient 变量的值为 : 4