على هذا النحو ، لا توفر برمجة C دعمًا مباشرًا لمعالجة الأخطاء ولكنها لغة برمجة نظام ، فهي توفر لك الوصول على مستوى أدنى في شكل قيم إرجاع. معظم استدعاءات دالة C أو حتى Unix ترجع -1 أو NULL في حالة حدوث أي خطأ وتعيين رمز خطأ errno . يتم تعيينه كمتغير عام ويشير إلى حدوث خطأ أثناء أي استدعاء للدالة. يمكنك العثور على العديد من رموز الأخطاء المحددة في ملف الرأس <error.h>.
لذلك يمكن للمبرمج C التحقق من القيم التي تم إرجاعها ويمكنه اتخاذ الإجراء المناسب بناءً على قيمة الإرجاع. من الممارسات الجيدة تعيين errno على 0 في وقت تهيئة البرنامج. تشير القيمة 0 إلى عدم وجود خطأ في البرنامج.
errno ، perror (). و strerror ()
توفر لغة البرمجة C وظائف perror () و strerror () والتي يمكن استخدامها لعرض الرسالة النصية المرتبطة بالخطأ .
و perror () يعرض وظيفة السلسلة التي تمرر إلى ذلك، متبوعا بنقطتين، مسافة، ومن ثم تمثيل نصية من قيمة errno الحالية.
و strerror () وظيفة، والتي ترجع مؤشر إلى تمثيل نصية من قيمة errno الحالية.
دعنا نحاول محاكاة حالة خطأ ونحاول فتح ملف غير موجود. أنا هنا أستخدم كلتا الوظيفتين لإظهار الاستخدام ، ولكن يمكنك استخدام طريقة واحدة أو أكثر لطباعة أخطائك. النقطة الثانية المهمة التي يجب ملاحظتها هي أنه يجب عليك استخدام دفق ملف 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; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
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_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, "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
تعليقات
إرسال تعليق