الأخطاء التي لا تستطيع تفاديها في برامج ++C

الأخطاء البشرية موجودة في كل شيء في الحياة فالإنسان يتعلم من خطئه، كما التجارب تُكسب الإنسان المعرفة والخبرة في أمور الحياة كلها و هكذا البرمجة جزءٌ من الحياة. والأخطاء البرمجية تُشبه تماماً الأخطاء في الحياة منها الكبير ومنها الصغير.

تسببت الأخطاء البرمجية في خسائر فادحة عبر التاريخ مثل خطأ الجهاز المبرمج لعلاج مرضى السرطان بالإشعاعات Therac-25 نتج عنه وفاة ثمان أشخاص وتضرر عشرين آخرين بإصابات خطيرة. إنهُ مجرد خطأ برمجي، لذا سوف أوضح لك أنواع الأخطاء في شيفرة ++C حتى تحاول تجنبها إن إستطعت .

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

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

تصنيفات الأخطاء :

  • أخطاء أثناء الترجمة: وهي تلك التي تحدث أثناء ترجمة البرنامج من لغة ++C إلى لغة الآلة. وإن حدثت، فإنك قد تحصل وقد لا تحصل على البرنامج التنفيذي، لأن ذلك يعتمد على فداحة الخطأ في البرنامج وكذلك المترجم المستخدم. معظم المترجمات ستساعدك على إكتشاف هذه الأخطاء التي تحدث أثناء الترجمة وستخبرك عن الخطأ وعن رقم السطر الذي ورد فيه. ولكن لا تتوقع أن يشير لك المترجم عن مكان الخطأ بالضبط وعن كيفية تصحيحه، بل سيلمح لك بذلك، ويرجع ذلك إلى أسباب متعلقة بسرعة وأداء المترجم. ويمكن تقسيمها كالتالي:
    • رسائل تحذيرية Warring: للأخطاء غير الفادحة وتصدر من المترجم لتنبه المبرمج بوجود شيء غير طبيعي قد يسبب حدوث أخطاء. هذه الرسائل تعني أن البرنامج سيُنفّذ بنجاح رغم وجود الرسائل التحذيرية. مثلاً عند إستقبال متغير من نوع الأعداد الصحيحة لقيمة من متغير من نوع الأعداد الحقيقية، يصدر المترجم تحذيراً للإشارة أن القيمة قد لا يمكن استيعابها في المتغير الصحيح، أو أن الكسر العشري سيتم إلغائه وتخزين العدد الصحيح فقط.
    • أخطاء هجائية Lexical: من الأخطاء الفادحة التي تؤدي إلى توقف عملية الترجمة، وتحدث عندما تخطي في هجاء إسم متغير أو كلمة ذات معنى للمترجم كالكلمات المحجوزة.
    • أخطاء بنائية Syntax Errors: تعتبر من الأخطاء الفادحة وتحدث في حالة عدم إتباع قوانين وقواعد لغة ++C في بناء التعليمات، مثل عدم وضع فاصلة منقوطة بعد التعليمة. لا تتوقع أن تعبث بقوانين البناء الأساسية ليسامحك قانون المترجم 🙂 .
  • أخطاء أثناء التنفيذ Run-Time Errors: وتسمى أيضا بأخطاء المعاني Semantic Errors وهي التي تحدث بسبب مخالفة القوانين خلال فترة تنفيذ البرنامج. حيث يقوم نظام التشغيل برصد مثل تلك المخالفات مثل: القسمة على الصفر، أو تطبيق عملية حسابية على نوع لا يتناسب مع تلك العملية أثناء فترة تنفيذ البرنامج. و تعتبر من الأخطاء الفادحة التي توقف عملية التنفيذ مع إصدار رسالة من نظام التشغيل تبين السبب. ويمكن الإستفادة من تلك الرسالة في تحديد موقع الخطأ في شيفرة البرنامج.
  • أخطاء منطقية Logic Errors: من الأخطاء التي يصعب اكتشافها لأنها أخطاء في سير البرنامج و ليست هجائية أو بنائية. لذلك لا يستطيع المترجم أن يكتشفها عند ترجمة البرنامج. ويقع المبرمج فيها عندما يكتب برنامجاً معيناً لحل مشكلة ما ولكن على أساس خاطئ. و هنا ستتم عملية الترجمة بنجاح، وستتم عملية التنفيذ بنجاح كذلك، ولكن بعد الإنتهاء من التنفيذ سيقدم نتائج غير متوقعة. ومن أجل اكتشاف هذه الأخطاء وتصحيحها، يتعين على المبرمج أن يتتبع خطوات سير البرنامج والتأكد من صحة عباراته. وعملية التتبع هذه صعبة، لذا ظهرت برامج التشخيص Debugger والتي تساعد المبرمج على إكتشاف هذه الأخطاء المنطقية عن طريق متابعة سير البرنامج، و مراقبة قيم المتغيرات المستخدمة. وعادة ما تكون برامج التشخيص Debugger مرفقة مع المترجم المستخدم.

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

محمد إبراهيم

محمد ابراهيم مهندس حاسوب سوداني 21 عام مهتم بمجال التكنولوجيا والعالم الرقمي

‫2 تعليقات

  1. السلام عليكم و رحمة الله و تعالي و بركاته
    التحية لمتابعي مدونة علوم الراقية
    موضوع الاخطاء البرمجية في لغة السي بلس بلس كان في قمة الروعة و السرد للموضوع كان ايجابي
    من فضلك ممكن كتاب تعلم لغة البرمجة سي بلس بلس من الالف للياء

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مقالات ذات صلة

زر الذهاب إلى الأعلى