في C ، رابط مفقود بين "نهايات العملية الرئيسية" إلى "استدعاء أي وظائف مسجلة لدى ATEXIT"
سؤال
في 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()
.