أهلا ومرحبا بكم مرة أخرى.
في هذه المحاضرة ، أريد فقط مراجعة بعض المحولات والتحذيرات الشائعة.
تحدثنا عن بعض مشاكل ج الشائعة.
لكن في بعض الأحيان لا تعرف حتى أن لديك هذه الأخطاء في برنامجك عندما
يحاول المترجم إخبارك بذلك.
تميل أخطاء المترجم والتحذيرات إلى أن تكون مشفرة حقًا للمبرمجين الجدد.
قد يخبرونك أنك تفتقد فاصلة منقوطة ، لكنها تشير إلى نهاية العبارة التي يتعذر الوصول إليها.
وبالنسبة لشخص جديد ، فقد لا يعرفون حتى ماذا يعني ذلك.
لذلك يتطلب الأمر الكثير من التدريب في كتابة الكثير من التعليمات
البرمجية وفك تشفير بعض تحذيرات المترجم بمرور الوقت.
لكني أود أن أقدم لكم تنبيهًا قبل ذلك.
إذاً ، بعض المشاكل الشائعة التي رأيتها في المحاضرة السابقة ، سأقوم
في الواقع بوصف بعض التحذيرات والأخطاء الخاصة بالمجمع وما سيقوله في الواقع.
من المهم جدًا جدًا إخبارك بفهم ما يخبرك به المترجم.
إذا أخبرك المترجم بهذه الأخطاء ، لكنك لا تفهم هذا الخطأ
، فسيستغرق الأمر وقتًا أطول لإصلاح هذا الرمز.
ولكن إذا رأيت الخطأ وكنت تعرف بالضبط ما يقوله ، فيمكنك حينئذٍ الذهاب
وإصلاحه في أي وقت من الأوقات.
أتذكر ، كنت سأكون في المختبر عندما بدأت البرمجة
لأول مرة ، وسأفتقد الفاصلة
المنقوطة ، وهو أمر شائع جدًا. وسيخبرني المترجم أنني أفتقد فاصلة منقوطة
، لكنني لن أعرف ذلك ، سيقول
فقط نهاية العبارة التي يتعذر الوصول إليها ، وسأقول ، ماذا
يعني ذلك ، ما هو البيان. سأكون في حيرة من أمري.
لهذا السبب أردت أن أعطيك بعض النصائح حول ما يحاول المترجم أن يخبرك به بالفعل.
لذلك من الصعب جدًا فهم ما يشكو منه المترجم.
في بعض الأحيان يكون فك رموز هذه
الرسائل مربكًا للغاية.
لذلك أنت بحاجة إلى فهم أخطاء المترجم هذه لإصلاحها ، وهي أساسية جدًا.
والمترجم يقوم بنصف المهمة نيابة عنك.
إنه يتحقق من بناء الجملة ، ويخبرك ما هو الخطأ بالضبط
، لذا يجب عليك استخدام ذلك لصالحك.
لكن في بعض الأحيان يصعب فهم ما يقوله بالضبط خاصة إذا كنت
جديدًا ولا تفهم بعض المصطلحات.
يتخذ المترجم قرارات حول كيفية ترجمة التعليمات البرمجية الخاصة
بك والتي لم يكتبها المبرمج في الكود.
هذا مناسب للبرنامج والمترجم ، بحيث يمكن
كتابته بإيجاز أكبر.
ويستفيد من هذه الميزة المبرمجون الخبراء فقط.
لذا فإن ما أخبرك به هو عندما تقوم بالتجميع ، يجب عليك
دائمًا استخدام خيار جدار الشرطة.
هذا سوف يعمل على كل شيء.
لذلك في بعض الأحيان ، هناك ميزة أكثر تقدمًا وهي
أنك ستقوم بالفعل بإخراج
بعض الأشياء ، وجعل الترجمة أكثر فاعلية.
ولكن عندما تضيف ذلك ، فإنك
تتسبب في تجميع البرنامج بشكل مختلف.
ونتيجة لذلك ، قد تكون لديك تحذيرات في التعليمات البرمجية الخاصة بك لا تعرف عنها شيئًا.
لذا فإن السبب الذي أخبرك به هو أنك تريد دائمًا التجميع باستخدام خيار معين
، وهو خيار جدار الشرطة.
وأنت في الواقع يتم تشغيله افتراضيًا في كتل التعليمات البرمجية.
وسيعلمك هذا بجميع الحالات التي يقوم فيها
المترجم بأشياء لا تعرف عنها.
سيتم أيضًا تشغيل جميع التحذيرات ، ويمنحك
الكثير من المعلومات ، إنه خيار مترجم مفيد للغاية.
بمجرد تشغيل هذا الخيار ، يمكنك محاولة مساعدتك
على فهم بعض ما يخبرك به المترجم بشكل أفضل.
لذا فإن المترجم سوف يعرض لك نوعين
من المشاكل. واحد خطأ.
سيؤدي هذا بالفعل إلى منع إنشاء البرنامج.
لديك خطأ في بناء الجملة ولا يمكن ترجمة البرنامج.
لم يتم إعادة إنشاء أي
عمل قابل للتنفيذ و. عادة ، عندما ترى أخطاء من المترجم ، فأنت تريد
دائمًا التركيز على هذا الخطأ الأول.
هذا هو الخطأ الأكثر موثوقية
لأن بعض الأخطاء الأخرى قد تكون نتيجة لذلك الخطأ الأول.
لذلك ركز دائمًا على هذا الخطأ الأول. أصلح الأخطاء في الجزء العلوي أولاً ، ثم قم
بالتجميع مرة أخرى وتحقق مما إذا كانت الأخطاء الأخرى ستختفي.
تحذيرات. التحذيرات هي الرسائل التي يعرضها
المترجم للحالات الخاصة والتي تم فيها اكتشاف نوع من الشذوذ.
إنها أخطاء غير فادحة. لذلك سيتم إنشاء الملف القابل للتنفيذ.
لكنه لا يزال شيئًا يجب عليك إصلاحه.
هناك تحذير لسبب ما. إما أنك تفعل شيئًا غير صحيح
أو قد يتسبب في مشكلة في المستقبل.
لذا فأنت تريد دائمًا إصلاح جميع تحذيراتك.
ومن خلال التجميع باستخدام خيار لوحة القيادة
، لا تعتبر البرنامج صحيحًا حتى يتم التخلص من جميع التحذيرات.
لذا فإن التجميع لن يفشل. هذا هو السبب في أنني أخبرك
باستخدام هذا الخيار بالإضافة إلى رؤية كل ما يجري بواسطة المترجم.
لذا فإن بعض رسائل المترجم الأكثر شيوعًا التي ستواجهها ، وسيكون
هذا مرتبطًا بشكل مباشر ببعض مشكلات c الأكثر شيوعًا التي
ذكرناها سابقًا.
إذا كان المتغير غير معرّف ، فسترى متغير الرسالة هذا غير معرّف أولاً
باستخدام هذه الوظيفة.
يعد هذا أحد أكثر الطرق شيوعًا وعادة ما يسهل اكتشافه.
وبعد ذلك سيعرض أيضًا الرمز قبل
هذه الرسالة.
سيقول بشكل أساسي أنك تحاول
استخدام هذا المتغير ، لكنك لم تعلن عنه مطلقًا.
نعلم أنه عندما تعلن عن متغير ، فإنك تحدد نوع البيانات.
لا يمكنك مجرد توقيع البيانات على متغيرات غير موجودة.
إعلان تحذيري ضمني عن الوظيفة ، يتعلق بإعلانات الوظيفة.
إنه عندما تحاول استدعاء وظيفة ، ولكن إذا
لم يكن للوظيفة أي تنفيذ مرتبط بها. لم تقم بتضمين الرأس ، أو
أنك لم تعلن عنه. لذلك فهي لا تعرف مكانها ، ولا تعرف
كيف يتم التصريح عن الوظيفة ، ولا تعرف الوسيطات ، ولا تعرف القيمة المعادة.
ليس لديها معلومات عن الوظيفة نفسها؟
لحل هذه المشكلة ، أعلن دائمًا عن نموذج أولي للوظيفة في الأعلى.
تحذير آخر وهو أنه سيقول أن التحكم التحذيري يصل إلى نهاية الوظيفة غير الفارغة
، وهذا سيحدث عندما يتم تعريف الوظيفة على أنها إرجاع نتيجة غير باطلة ، ولكن
لا توجد عبارة إرجاع مضمنة في الوظيفة.
لذلك نسيت إعادة البيانات.
إما أنه تم تعريف الوظيفة بشكل غير صحيح حيث يتعين عليك إزالة
نوع البيانات قبل إعلان الوظيفة ، أو نسيت إضافة
عبارة الإرجاع هذه. يجب تغيير أحدهما الآخر
لإصلاح هذا التحذير.
لكنك ترى كيف هذا تحذير. لا يزال بإمكانك التجميع هناك
، ولكن هذا قد يتسبب بالفعل في حدوث مشكلات في برنامجك.
إذا كنت تتوقع أن تقوم دالة بإرجاع شيء ما ولا تريد إصلاح تحذيراتك
، متغير غير مستخدم ، تحذير شائع آخر.
تتم طباعة هذا بواسطة المترجم عندما يتم التصريح عن متغير ، ولكن لا يتم استخدامه مطلقًا.
لا يجب أن تعلن عن متغير إذا لم تستخدمه
، لذا احذف هذا الإعلان.
أميل إلى الحصول عليها قليلاً عندما أقوم ببعض العروض التوضيحية الخاصة
بي لأنني أتركها في متغيرات لا أستخدمها أبدًا.
أو عندما كنت أقوم بشرح كيفية التصريح عن متغير ثم قمت بتجميعه
لتوضيح ذلك المترجم ، كنت أتلقى تحذيرًا يقول إنه لم يتم استخدامه مطلقًا.
لذلك هذا جيد لأنني كنت أعرض شيئًا. لكن قم بإزالة المتغيرات
الخاصة بك إذا لم يتم استخدامها. لا حاجة للإعلان.
المرجعية غير معرفة ل. يحدث هذا في مرحلة الربط.
لذلك تذكر أن المترجم أو مرحلة التجميع ، سيتم تجميعها.
أولاً ، سيقوم بتشغيل المعالج المسبق ، ثم يقوم بإنشاء ملفات الكائن ثم يأخذ
ملفات الكائن ويربطها معًا لإنشاء برنامج كامل.
لذلك خلال مرحلة الربط ،
يحتاج إلى حل أي تبعيات خارجية.
أو على وجه التحديد أي وظائف تتصل بها ،
يجب تنفيذها في مكان ما.
لذلك إذا لم يكن يحتوي على ملف الكائن هذا ، فسوف يعطيك هذه المشكلة.
أنت تحاول استدعاء دالة ، لكن ليس لدينا الرمز الخاص بها.
لذلك عليك إما التأكد من الارتباط
بهذا الملف.
عادةً ما يحدث الرابط لك
، ولكن في دول مجلس التعاون الخليجي يمكنك فقط عمل خيار
dash l لإضافة ملف الربط. لذلك إذا كنت تستخدم دالة في ملف رأس
الرياضيات ، لكنك لا تربط ملف كائن الرياضيات ، فستتلقى هذا الخطأ.
ويحدث ذلك أيضًا إذا كان لديك تعريف المستخدم
ولم تقم بتضمين ملف مصدر c.
لذلك لديك عدة ملفات مصدر c.
يقوم أحد ملفات المصدر c بتنفيذ هذه الوظيفة.
هناك ملف مصدر c آخر يتضمن العنوان واستدعائه
، لكنك لم تقم أبدًا
بتجميع ملف المصدر c الآخر الذي يحتوي على التنفيذ ، فسترى هذا
الخطأ.
لذا تأكد من إحضار هذا الملف المصدر ، وتأكد من إحضار أي ملفات
مصدر مكتبة قياسية إذا كنت بحاجة إلى ذلك بشكل صريح عادةً ، فلن تضطر إلى القيام بذلك.
خطأ شائع آخر يحدث عند وجود أنواع متضاربة لـ.
هذا عندما تكون قد حددت بالفعل نموذجًا أوليًا لوظيفة أو أعلنت عنها ، وبعد ذلك
عندما ذهبت لتنفيذه ، لم يكن الأمر نفسه كما أعلنته.
على سبيل المثال ، يحتوي النموذج الأولي على نوع نتيجة واسم أقواس للمعلمات
ثم فاصلة منقوطة.
وبعد ذلك عندما تحدد التنفيذ ، يكون
لديك رأس دالة فعلية مختلفة.
لديك نوع إرجاع مختلف أو لديك عدد مختلف من المعلمات.
وهذا يعني حسنًا ، لديك إعلان
الوظيفة هذا. وبعد ذلك ، عندما تذهب إلى تنفيذه أدناه ، يكون الأمر مختلفًا تمامًا.
لذلك هناك عدم تطابق.
وهذا سيظهر لك في الواقع على السطر أن الصراع يظهر في التعريف
السابق الذي تسبب في التناقض.
لذلك في التنفيذ عادة ما يظهر لك السطر لأنك عادة
تعلن عن وظائفك في الأعلى.
أخطاء وقت التشغيل. أخطاء وقت التشغيل هي مشكلات في التعليمات
البرمجية تحدث عند تشغيل البرنامج ، وليس عند تجميعه.
لذلك عادة ما تكون
هذه أعطال أو أخطاء غير فادحة حيث تكون
خارج الحدود أو شيء من هذا القبيل.
عندما يكون البرنامج قيد التشغيل ، يكون لديك نوع من الخطأ المنطقي.
لذلك قد ينتهي تنفيذ برامج c بشكل مفاجئ مع حدوث عطل عند اكتشاف خطأ في وقت
التشغيل ، وهو أمر لا يمكن التعامل معه. هناك فساد في الذاكرة
كما ذكرت.
عادةً ما تتسبب أخطاء خارج الحدود في تعطل البرامج.
عادة ، ما ستراه هو خطأ تجزئة.
وخطأ التقسيم لا يخبرك حقًا بأي شيء.
لذلك عادةً ما تريد القيام به لتشخيص هذه المشكلة بشكل أكبر
هو إلقاء نظرة على مكدس المكالمات ،
كما ذكرت قبل تعطل البرنامج وهو يتنقل سطراً بسطر
لمعرفة الخط الذي يسبب التعطل.
يمكنك الحصول على مكدس المكالمات إذا كان هناك ملف أساسي ، والذي ذكرته سابقًا.
وبعد ذلك من مكدس الاستدعاءات ، يمكنك رؤية الخط المتعطل.
أو الأفضل من ذلك ، قم بتشغيل المصحح ، خطوة سطرًا سطرًا ، ثم عند تنفيذ سطر ، مصحح
الأخطاء ، سترى تعطل البرنامج ويمكنك التعرف عليه بهذه الطريقة.
هذه مجرد بعض النصائح الإضافية حول أخطاء
المترجم والتحذيرات والرسائل وكيفية تفسيرها.
هناك بالفعل روابط
على الإنترنت. أو إذا كنت تستخدم
google ، فسوف يخبرك بكل خطأ في المترجم والتحذير
الذي يمكن إنتاجه وسيقدم في الواقع تعريفًا
لسبب إنتاجه وما هي المشكلة بشكل
أساسي.
لأنه مرة أخرى ، يمكن أن تكون أخطاء الترجمة هذه غامضة للغاية.
وحتى الكلمة الواحدة تقول سيطرة لا
يمكن الوصول إليها. أنت تعلم من هذا الوصف بالضرورة
ما لم تكن لديك تجربة ذلك ، فهذا يعني أنك لن تعيد شيئًا من وظيفة أبدًا.
ولكن إذا قمت بذلك ، فإن إحدى أفضل الطرق للعثور على المشكلات
وإصلاحها في برنامجك عندما يكون لديك أخطاء في المترجم ولا تفهم هذا المترجم
، ابحث عنه في google. وعادة ما يحدث هو أنك ستنتقل إلى تكديس الفائض.
وسوف يخبرك ، هذا هو خطأك ، هذه هي الطريقة التي
تحلها. أفعل ذلك حتى يومنا هذا.
لقد كنت أبرمج في c لمدة 15 عامًا ، ولكن لا تزال هناك أوقات
أواجه فيها أشياء ، وأنا أحب ما يعنيه هذا بالضبط.
وسأبحث عنه في جوجل ، وسآخذ المترجم بالفعل ، وأضعه بين علامات اقتباس
وسيخبرني بالضبط بما يحدث.
Stack overflow هو موقع جيد حقًا.
ويمكن حقًا توفير الكثير من الوقت
في عملية التصحيح. لا تحاول التخمين فقط عندما ترى المجمعين أو التحذيرات.
يحاول المترجم إخبارك بشيء ما وسيحدد بدقة ما يحدث.
لذلك إذا فهمتها ، فستتمكن من حل مشكلتك كثيرًا ، بشكل أسرع.
وإذا لم يكن هذا شيئًا مألوفًا لك
، فانتقل إلى مكدس الفائض أو انتقل إلى موقع ويب يصفهم جميعًا ويمكنك
فك تشفيره بهذه الطريقة.
اتمنى ان يكون ذلك مفيدا. شكرًا لك.