سؤال

جرب اتباع ملفات المصدر 1.cpp

Genacodicetagpre

2.cpp

Genacodicetagpre

هل تم تجميع البرنامج من هذه الملفات بشكل جيد؟ما الذي يجب أن يحتويه ناتجها؟

لقد توقعت حدوث خطأ في الرابط بسبب انتهاك قاعدة تعريف واحدة أو الإخراج "1 2".ومع ذلك ، فإنه يطبع "1 1" عند التحويل البرمجي باستخدام g ++ 3.4 و VC 8.0.
كيف يمكن تفسير ذلك؟

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

يعد سلوكًا غير محدد (مع عدم وجود تشخيص مطلوب) إذا كانت الوظائف المضمنة (مثل مُنشئ الفصل الخاص بك) لها تعريفات مختلفة في وحدات ترجمة مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top