main
से पहले कोड निष्पादित करना निश्चित रूप से संभव है, जैसा कि this question में कई उदाहरणों द्वारा देखा गया है।क्या यह मुख्य से पहले कार्यक्रम से बाहर निकलने के लिए अच्छी तरह से परिभाषित व्यवहार है?
हालांकि, अगर उस पूर्व-मुख्य कोड में, प्रोग्राम को std::exit
या std::abort
के माध्यम से बाहर निकलने के लिए कहा जाता है? चूंकि main
को प्रोग्राम की शुरुआत के रूप में परिभाषित किया गया है, शुरुआत से पहले बाहर निकलने से क्या परिणाम हैं?
प्रत्येक अनुभाग में कुछ मुद्रण पर, मैंने निम्नलिखित परिणाम प्राप्त:
स्वरूप:
धारा: output
मुख्य: main
Init (पहले बुलाया मुख्य): init
बाहर निकलें (std::atexit
Init अंदर के साथ सेट अप): exiting
नमूना रन:
Init से बाहर निकले बिना कहा जाता है:
init
मुख्य
रिटर्न 0
Init कॉल std :: बाहर निकलें (0):
init
रिटर्न 0
Init एसटीडी कॉल: : निरस्त:
init
दुर्घटनाओं और जीसीसी 4.7 के साथ Windows पर 3 देता है।2
दुर्घटनाओं और
रिटर्न 0 VS11 साथ हमेशा की तरह बॉक्स सामने आ LiveWorkSpace पर
Init हैंडलर सेट करता है और कहता है std :: बाहर निकलें (0):
init
रिटर्न 0
Init हैंडलर सेट करता है और कहता है std :: बीच में बंद करें:
init
हैंडलर
जबकि खोज, मैं इस सवाल को देखा बिना के रूप में ही सौदा: Is there any way a C/C++ program can crash before main()?। हालांकि, यह जवाब नहीं देता कि मैं क्या जानना चाहता हूं: क्या इस व्यवहार में से कोई भी std::exit
या std::abort
main
से पहले, अच्छी तरह से परिभाषित किया गया है? क्या यह अनिर्धारित व्यवहार है?
यदि आप परीक्षणों के संयोजन के नमूने में रूचि रखते हैं, [यहां एक है] (http://liveworkspace.org/code/ff19b767d545e3c8a76671b1d21add00)। – chris