معالجة الاستثناءات في C
طبّقوا استراتيجيات فعّالة لمعالجة الأخطاء دون استخدام معالجة استثناءات مدمجة
معالجة الاستثناءات في C درس مجاني في C Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 3 دروس في المجموع.
مقدمة إلى معالجة الاستثناءات
معالجة الاستثناءات في C
على خلاف لغات مثل C++ وJava، لا تحتوي C على معالجة استثناءات مضمّنة.
في هذا الدرس، ستتعلّم:
- كيفية معالجة الأخطاء باستخدام القيم المرجعة.
- كيفية استخدام
setjmpوlongjmpلمعالجة الاستثناءات. - كيفية استخدام
errnoلمعالجة أخطاء النظام.

معالجة الأخطاء باستخدام القيم المرجعة
إن أبسط طريقة لمعالجة الأخطاء في C هي استخدام القيم المرجعة.
مثال:
int divide(int a, int b) {
if (b == 0) return -1; // Error code
return a / b;
}
يتحقق المستدعي من القيمة المرجعة بحثًا عن الأخطاء.
مثال: معالجة الأخطاء باستخدام القيم المرجعة
يتحقق هذا البرنامج من القسمة على صفر باستخدام القيم المرجعة.
#include <stdio.h>
int divide(int a, int b) {
if (b == 0) {
printf("Error: Division by zero!\n");
return -1;
}
return a / b;
}
int main() {
int result = divide(10, 0);
if (result != -1) {
printf("Result: %d\n", result);
}
return 0;
}استخدام setjmp وlongjmp لمعالجة الأخطاء
تتيح الدالتان setjmp وlongjmp عمليات انتقال غير محلية، لمحاكاة معالجة الاستثناءات.
الخطوات:
- استخدم
setjmp()لتحديد نقطة استرداد. - استخدم
longjmp()للعودة عند حدوث خطأ.
مثال: استخدام setjmp وlongjmp
يستخدم هذا البرنامج setjmp وlongjmp لمعالجة الأخطاء.
#include <stdio.h>
#include <setjmp.h>
jmp_buf buffer;
void errorHandler() {
printf("Error occurred! Jumping back to safe state.\n");
longjmp(buffer, 1);
}
int main() {
if (setjmp(buffer) == 0) {
printf("Executing main program...\n");
errorHandler();
} else {
printf("Recovered from error.\n");
}
return 0;
}استخدام errno لأخطاء النظام
يخزّن المتغير errno رموز الأخطاء الناتجة عن استدعاءات النظام.
مثال:
#include
تعيّن دوال مثل fopen() قيمة errno عند حدوث أخطاء.
مثال: استخدام errno لمعالجة الملفات
يتحقق هذا البرنامج من errno عند فتح ملف غير موجود.
#include <stdio.h>
#include <errno.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
perror("Error opening file");
}
return 0;
}أفضل الممارسات لمعالجة الأخطاء
لإدارة الأخطاء بفعالية:
- تحقّق من القيم المرجعة للدوال.
- استخدم
errnoلأخطاء النظام. - استخدم
setjmpوlongjmpعند الضرورة فقط.
الملخص
في هذا الدرس، تعلّمت:
- كيفية معالجة الأخطاء باستخدام القيم المرجعة.
- كيف تحاكي
setjmpوlongjmpمعالجة الاستثناءات. - كيفية استخدام
errnoلاكتشاف أخطاء النظام.
وبهذا نختتم قسم تصحيح الأخطاء ومعالجة الأخطاء في C!

تعلم C مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 39
- الدروس
- 144
الأسئلة الشائعة
هل درس «معالجة الاستثناءات في C» مجاني؟
نعم — نص درس «معالجة الاستثناءات في C» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 3 دروس في المجموع.
ماذا ستتعلم في «معالجة الاستثناءات في C»؟
طبّقوا استراتيجيات فعّالة لمعالجة الأخطاء دون استخدام معالجة استثناءات مدمجة تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟
لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «معالجة الاستثناءات في C»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟
نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تصحيح الأخطاء باستخدام GDB
- أخطاء وقت التشغيل الشائعة
- معالجة الاستثناءات في C