سؤال

في C: لماذا لا يتم الإشارة إلى وظائف مضمّنة فقط مع الارتباط الداخلي (أي معلن مع ثابت) (أي عنوان النسخ أو القراءة أو الكتابة أو الاتصال) متغير أو وظيفة في نطاق الملف مع مدة التخزين الثابت ؟

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

المحلول

هذه هي الطريقة التي يتم بها تعريف الأشياء.

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

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

نصائح أخرى

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

للحصول على وظيفة مضمّنة مع الارتباط الخارجي ، يجوز للمترجم:

  • اتصل ب نموذج ضمن وحدة الترجمة التي يتم فيها إعلان الوظيفة
  • إجراء استبدال مضمّن عند نقطة المكالمة
  • إنشاء متطابقة ولكن منفصلة نموذج من الوظيفة داخل وحدة ترجمة الاتصال

في الحالتين الأخيرين ، لن تكون الكائنات ذات الارتباط الداخلي مرئيًا. لذلك لا يمكن أن تشير وظيفة مضمّنة مع الارتباط الخارجي إلى معرف مع الارتباط الداخلي.

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

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