الانتقال إلى المحتوى الرئيسي

كيفية رمي استثناء في ج: طريقة بسيطة وميزات العمل

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

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

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

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

  1. كيفية رمي استثناء في ج: الأساسيات والطريقة السهلة
  2. ما هو الاستثناء في ج ولماذا هو مهم?
  3. الملامح الرئيسية للعمل مع استثناءات في ج
  4. طريقة سهلة لرمي استثناء في ج
  5. كيفية التعامل مع استثناء القيت في ج
  6. باستخدام مشغل محاولة الصيد
  7. باستخدام إرجاع قيمة الدالة
  8. استخدام المتغيرات العالمية
  9. هو الفرق بين رمي استثناء وخطأ في ج
  10. رمي استثناء
  11. حدوث خطأ
  12. الاستنتاجات
  13. ميزات وميزات إضافية للعمل مع استثناءات في ج
  14. سؤال وجواب
  15. كيف يمكنني رمي استثناء في ج?
  16. ما هي ملامح وظيفة سيتجمب?
  17. في أي الحالات يجب أن أستخدم آلية رمي الاستثناء في ج?
  18. هل من الممكن رمي استثناء مع معلمة?

كيفية رمي استثناء في ج: الأساسيات والطريقة السهلة

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

) ، تخطي جميع التعليمات الوسيطة.

لرمي ومعالجة الاستثناءات:

  1. في التعليمات البرمجية الخاصة بك.
  2. (هذا نوع خاص يستخدم لحفظ حالة تنفيذ البرنامج).
  3. .
  4. والقيمة المطلوبة للعودة (يمكن استخدام هذه القيمة لتحديد سبب الاستثناء).
  5. ، التحقق من القيمة المحددة.

المهام:

# تشمل 

# تشمل

جمب_بوف استثناء_بوفر;

فواد رمي_إكسيبتيون (إنت السبب) {

لونغجمب (استثناء_بوفر ، السبب);

}

كثافة العمليات الرئيسية () {

النتيجة الدولية = سيتجمب (استثناء_بوفر);

إذا (النتيجة= = 0) {

// هنا هو الرمز الذي يمكن أن يلقي استثناء

رمي استثناء (42) ؛ / / مثال على رمي استثناء

} آخر {

// هنا هو رمز للتعامل مع استثناء القيت

برينتف ("استثناء اشتعلت: ٪ د

"،النتيجة);

}

العودة 0;

}

لرمي استثناء مع القيمة المحددة (في هذا المثال ، 42).

، حيث سيتم التعامل مع الاستثناء الذي تم طرحه.

يمكنك محاكاة العمل مع استثناءات في ج وتنفيذ إدارة الأخطاء والمنطق المحدد للتعامل مع المواقف الاستثنائية.

ما هو الاستثناء في ج ولماذا هو مهم?

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

يمكن طرح استثناء بواسطة البرنامج عند حدوث حالة غير متوقعة أو غير صحيحة. على سبيل المثال ، قد يكون القسمة على صفر ، أو تجاوز حدود المصفوفة ، أو عدم القدرة على فتح ملف.

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

باستخدام الاستثناءات ، بدلا من مجرد إنهاء البرنامج في مكانه ، يمكنك اعتراض الاستثناء وتنفيذ إجراءات إضافية ، مثل كتابة رسالة خطأ أو الاستمرار في تنفيذ البرنامج بإجراءات بديلة.

. يسمح هذا للبرنامج بالتبديل إلى معالج الاستثناء ، متجاوزا العمليات الوسيطة.

باستخدام الاستثناءات ، يمكن للمبرمجين إنشاء برامج أكثر موثوقية واستقرارا يمكنها التعامل مع الأخطاء واتخاذ التدابير المناسبة دون التسبب في تعطل البرنامج.

الملامح الرئيسية للعمل مع استثناءات في ج

العمل مع استثناءات في لغة البرمجة ج له خصائصه الخاصة:

  • على عكس بعض اللغات الأخرى مثل ج or أو جافا ، ج ليس لديها آلية مدمجة للعمل مع استثناءات. هذا يعني أنه يتعين على المطور التعامل مع المواقف الاستثنائية "يدويا".
  • يتم تنفيذ معالجة الاستثناء في ج باستخدام وظائف سيتجمب () و لونغجمب (). وظيفة سيتجمب() يحدد مؤشر إلى النقطة الحالية في البرنامج ، وظيفة لونغجمب() يقفز إلى هذه النقطة. وبالتالي ، من الممكن تنفيذ آلية لرمي الاستثناءات والتعامل معها.
  • باستخدام سيتجمب() و لونغجمب () يتطلب الرعاية والرعاية من جانب المطور. يمكن أن يؤدي الاستخدام غير السليم لهذه الوظائف إلى سلوك برنامج غير متوقع أو تسرب في الذاكرة. لذلك ، فمن المستحسن استخدامها بحذر وفقط في الحالات الضرورية.
  • في ج ، يمكنك أيضا استخدام آلية معالجة الأخطاء عن طريق إرجاع رموز الخطأ. في هذه الحالة ، قد تقوم الوظيفة بإرجاع قيمة خاصة أو رمز خطأ يجب على المطور التحقق منه بعد استدعاء الوظيفة.
  • العمل مع استثناءات في ج يمكن أن يكون صعبا ويتطلب المزيد من الجهد من المطور مقارنة بلغات البرمجة الأخرى. ومع ذلك ، عند استخدامها بشكل صحيح ، يمكن للاستثناءات تبسيط التطوير بشكل كبير وجعل البرنامج أكثر موثوقية وأمانا.

طريقة سهلة لرمي استثناء في ج

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

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

على سبيل المثال ، ضع في اعتبارك دالة تقسم رقما على آخر:

قسم كثافة العمليات (كثافة العمليات أ ، كثافة العمليات ب) {

إذا (ب = = 0) {

العودة -1 ؛ / / العودة -1 إذا كان المقسوم عليه صفرا

}

العودة أ / ب;

}

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

يمكن استخدام هذا النهج مع الحلقات للتعامل مع مواقف استثنائية متعددة في وظيفة واحدة.:

كثافة العمليات _ البيانات (كثافة العمليات* البيانات ، طول كثافة العمليات) {

ل (إنت أنا = 0 ؛ أنا < طول ؛ أنا i) {

إذا (البيانات[أنا] < 0) {

العودة -1 ؛ / / العودة -1 إذا كان عنصر سلبي

تم العثور على }

// ...

}

العودة 0;

}

في هذا المثال ، تمر وظيفة "بيانات العملية" عبر مصفوفة البيانات ، وإذا واجهت عنصرا سلبيا ، فإنها ترجع على الفور -1.

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

كيفية التعامل مع استثناء القيت في ج

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

باستخدام مشغل محاولة الصيد

ج ليس لديه دعم مدمج لمشغلي المحاولة ، مثل ، على سبيل المثال ، ج++. ومع ذلك ، يمكنك استخدام مكتبات الجهات الخارجية مثل سيتجمب.ح و لونغجمب.ح لتنفيذ هذه الوظيفة. مشغلي سيتجمب () و لونغجمب () تسمح لك لتعيين نقطة العودة والقفز إليها ، حتى بعد عدة وظائف.

مثال:

# تشمل 

# تشمل

جمب_بوف العازلة;

فو الفراغ()

{

إذا (سيتجمب (العازلة) != 0)

{

برينتف ("تم اعتراض الاستثناء

");

}

آخر

{

برينتف ("رمي استثناء

");

لونغجمب (العازلة ، 1);

}

}

كثافة العمليات الرئيسية()

{

فو();

العودة 0;

}

في هذا المثال ، وظيفة فو() يلقي استثناء باستخدام لونغجمب (). ثم ، في وظيفة الرئيسية () ، ونحن نستخدم وظيفة سيتجمب () لتعيين نقطة العودة وقبض على استثناء القيت. إذا تم اعتراض استثناء ، فسيتم عرض الرسالة "تم اعتراض الاستثناء".

باستخدام إرجاع قيمة الدالة

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

مثال:

# تشمل

تقسيم كثافة العمليات (كثافة العمليات أ ، كثافة العمليات ب ، كثافة العمليات * النتيجة)

{

إذا (ب = = 0)

{

العودة -1 ؛ / / إرجاع خطأ

}

* النتيجة = أ / ب;

العودة 0 ؛ / / عودة عملية ناجحة

}

كثافة العمليات الرئيسية()

{

الباحث أ = 10;

كثافة العمليات ب = 0;

نتيجة كثافة العمليات;

إذا (تقسيم (أ ، ب ، والنتيجة) = = 0)

{

برينتف ("نتيجة القسمة: ٪ د

"،النتيجة);

}

آخر

{

برينتف ("خطأ في القسمة

");

}

العودة 0;

}

في هذا المثال ، تقسم دالة القسمة () رقمين وتعيد 0 في حالة نجاحها ، أو -1 في حالة حدوث خطأ. في الوظيفة الرئيسية () ، نقوم بمعالجة قيمة الإرجاع للوظيفة وإخراج النتيجة أو رسالة الخطأ.

استخدام المتغيرات العالمية

هناك طريقة أخرى للتعامل مع الاستثناءات التي تم طرحها في ج وهي استخدام المتغيرات العامة لنقل معلومات الاستثناء بين الوظائف.

مثال:

# تشمل

خطأ إنت = 0;

تقسيم كثافة العمليات (كثافة العمليات أ ، كثافة العمليات ب)

{

إذا (ب = = 0)

{

خطأ = 1 ؛ / / تعيين متغير الخطأ العام

العودة 0;

}

العودة أ / ب;

}

كثافة العمليات الرئيسية()

{

الباحث أ = 10;

كثافة العمليات ب = 0;

نتيجة كثافة العمليات = القسمة (أ ، ب);

إذا (خطأ = = 1)

{

برينتف ("خطأ في القسمة

");

}

آخر

{

برينتف ("نتيجة القسمة: ٪ د

"،النتيجة);

}

العودة 0;

}

في هذا المثال ، تقوم دالة القسمة() بفحص المقسوم عليه على صفر وتعيين خطأ المتغير العمومي في حالة حدوث خطأ. في الوظيفة الرئيسية () ، نتحقق من قيمة المتغير العمومي للخطأ ونخرج النتيجة أو رسالة الخطأ.

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

الفرق بين رمي استثناء وخطأ في ج

رمي الاستثناءات والتسبب في الأخطاء هما طريقتان مختلفتان للتعامل مع المشكلات التي قد تحدث في برنامج ج والإبلاغ عنها.

عندما يحدث موقف خاطئ ، يمكن للسي التعامل معها بطريقتين مختلفتين: عن طريق رمي استثناء أو عن طريق التسبب في خطأ.

رمي استثناء

رمي استثناء هو آلية تسمح للبرنامج للتعامل مع وإخطار حول حدوث بعض الحالات الخاطئة. هذا نوع خاص من الأخطاء يمكن اكتشافه والتعامل معه في كتلة من التعليمات البرمجية المصممة خصيصا لمعالجة الاستثناءات.

لرمي استثناء في ج ، يتم استخدام وظيفة سيتجمب القياسية ، مما يحفظ الحالة الحالية للبرنامج وإرجاع السيطرة على كتلة خاصة من التعليمات البرمجية تسمى معالج استثناء.

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

حدوث خطأ

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

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

الاستنتاجات

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

ميزات وميزات إضافية للعمل مع استثناءات في ج

الاستثناءات في ج توفر فرصا إضافية لإدارة الأخطاء في البرنامج. فيما يلي ميزات العمل مع استثناءات في ج وكيفية استخدامها.

  • . تتيح لك هذه الوظيفة الانتقال إلى نقطة معينة في البرنامج ، وحفظ سياق التنفيذ وتمرير رمز الخطأ.
  • يمكن استخدامه لمعالجة الأخطاء.
  • لكل استثناء.
  • رموز الخطأ: عند رمي الاستثناءات في ج ، غالبا ما تستخدم رموز الخطأ لتحديد نوع الخطأ. يمكن تعريف رموز الخطأ على أنها تعداد أو وحدات ماكرو تم تعيينها لأخطاء محددة.
  • استخدام هياكل الاستثناء: في بعض الحالات ، يمكنك استخدام هياكل البيانات لتمثيل الاستثناءات التي تحتوي على معلومات خطأ إضافية. يتيح لك ذلك نقل معلومات خطأ أكثر تفصيلا بين الوظائف.

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

سؤال وجواب

كيف يمكنني رمي استثناء في ج?

يستعيد الحالة المحفوظة للسياق ويمرر القيمة المحددة بواسطة المعلمة الثانية التي تم استدعاؤها بها.

ما هي ملامح وظيفة سيتجمب?

، لذلك ، لا يوصى باستخدام هذه الآلية للتحكم في تدفق تنفيذ البرنامج إذا كان تنظيف الموارد المناسب مطلوبا.

في أي الحالات يجب أن أستخدم آلية رمي الاستثناء في ج?

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

هل من الممكن رمي استثناء مع معلمة?

ستكون متاحة لمزيد من المعالجة.