गर्भपात कार्यक्रम के लिए "असामान्य" अंत इंगित करता है, और पोसिक्स सिग्नल SIGABRT को उठाता है, जिसका अर्थ है कि उस सिग्नल के लिए आपके द्वारा पंजीकृत किसी भी हैंडलर को आमंत्रित किया जाएगा, हालांकि कार्यक्रम अभी भी किसी भी मामले में afterwords को समाप्त करेगा। आमतौर पर आप abortअनपेक्षित त्रुटि मामले से बाहर निकलने के लिए सी प्रोग्राम में उपयोग करते हैं , जहां प्रोग्राम खराब होने या नेटवर्क विफलता जैसी किसी चीज के बजाय प्रोग्राम में बग होने की संभावना है। उदाहरण के लिए, abortयदि आप डेटा संरचना में NULL पॉइंटर होने का पता लगा सकते हैं, जब तार्किक रूप से ऐसा कभी नहीं होना चाहिए।
निकास कार्यक्रम के लिए एक "सामान्य" अंत इंगित करता है, हालांकि यह अभी भी एक विफलता (लेकिन बग नहीं) का संकेत दे सकता है। दूसरे शब्दों में, आप exitएक त्रुटि कोड के साथ हो सकते हैं यदि उपयोगकर्ता ने इनपुट दिया है जिसे पार्स नहीं किया जा सकता है, या एक फ़ाइल नहीं पढ़ी जा सकती है। 0 से बाहर निकलने का कोड सफलता दर्शाता है। exitवैकल्पिक रूप से प्रोग्राम को समाप्त करने से पहले हैंडलर को भी बुलाता है। इन कार्यों atexitऔर on_exitकार्यों के साथ पंजीकृत हैं ।
std :: समाप्ति एक स्वचालित रूप से एक सी + + कार्यक्रम में कहा जाता है जब एक अखंड अपवाद है। यह अनिवार्य रूप से C ++ के बराबर है abort, यह मानते हुए कि आप अपवाद फेंकने के माध्यम से अपनी सभी असाधारण त्रुटियों की रिपोर्ट कर रहे हैं। यह std::set_terminateफ़ंक्शन द्वारा सेट किए गए हैंडलर को कॉल करता है, जो डिफ़ॉल्ट रूप से कॉल करता है abort।
C ++ में, आप आमतौर पर कॉलिंग abortया exitत्रुटि से बचना चाहते हैं , क्योंकि आप एक अपवाद को फेंकना बेहतर समझते हैं और कोड को आगे कॉल स्टैक तक तय करते हैं कि कार्यक्रम उचित है या नहीं। आप exitसफलता के लिए उपयोग करते हैं या नहीं, यह परिस्थिति का विषय है - चाहे या न हो, लेकिन वापसी के बयान के अलावा कार्यक्रम को कहीं और समाप्त कर देना चाहिए main।
std::terminateC ++ में भी एक अंतिम-खाई त्रुटि रिपोर्टिंग उपकरण माना जाना चाहिए। इसके साथ समस्या std::terminateयह है कि समाप्त हैंडलर के पास उस अपवाद तक पहुंच नहीं है, जो अखंड हो गया है, इसलिए यह बताने का कोई तरीका नहीं है कि यह क्या था। आप आमतौर पर एक try { } catch (std::exception& ex) { }ब्लॉक में मुख्य की संपूर्णता को लपेटकर बहुत बेहतर होते हैं । कम से कम तब आप उन अपवादों के बारे में अधिक जानकारी दर्ज कर सकते हैं, जो इससे प्राप्त हुए हैं std::exception(हालांकि निश्चित रूप से ऐसे अपवाद जो std::exceptionअभी भी नहीं निकले हैं, वे समाप्त हो जाएंगे)।
के शरीर रैपिंग mainमें try { } catch(...) { }ज्यादा हैंडलर समाप्त कर दें, क्योंकि फिर आप प्रश्न में अपवाद के लिए कोई उपयोग कर सकते है की स्थापना की तुलना में बेहतर नहीं है। संपादित करें: प्रति नील बटरवर्थ के जवाब में, इसमें एक लाभ यह है कि इस मामले में स्टैक अनजाना है, जो कि (कुछ आश्चर्यजनक रूप से) एक अखंड अपवाद के लिए सही नहीं है।