في C ، رابط مفقود بين "نهايات العملية الرئيسية" إلى "استدعاء أي وظائف مسجلة لدى ATEXIT"

StackOverflow https://stackoverflow.com/questions/1799306

  •  22-09-2019
  •  | 
  •  

سؤال

في C ، عندما تنتهي العملية الرئيسية - كيف تعرف أن تسمي أي وظائف مسجلة معها atexit()?

أنا أفهم كيف atexit() يعمل ، لكنني لا أفهم التواصل بين "انتهاء العملية الرئيسية" و "استدعاء أي وظائف مسجلة معها atexit()"أنا زائدة عن الحاجة بعض الشيء.

شكرًا!

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

المحلول

من المعيار C. رابط PDF] (5.1.2.2.3):

عودة من المكالمة الأولية إلى main الوظيفة تعادل استدعاء exit وظيفة مع القيمة التي تم إرجاعها بواسطة main تعمل كوسيطة ؛ الوصول إلى } هذا ينهي الوظيفة الرئيسية إرجاع قيمة 0.

إنها مسؤولية exit وظيفة للاتصال بالوظائف المسجلة مع atexit (انظر 7.20.4.3 في المعيار لوصف كل شيء exit يفعل).

نصائح أخرى

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

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