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