का उपयोग करना exit()ठीक है
कोड डिजाइन के दो प्रमुख पहलू जिनका अभी तक उल्लेख नहीं किया गया है, वे हैं 'थ्रेडिंग' और 'लाइब्रेरी'।
एकल-थ्रेडेड प्रोग्राम में, कोड में आप उस प्रोग्राम को लागू करने के लिए लिख रहे हैं, का उपयोग exit()करना ठीक है। मेरे कार्यक्रम नियमित रूप से इसका उपयोग करते हैं जब कुछ गलत हो जाता है और कोड ठीक नहीं हो रहा है।
परंतु…
हालाँकि, कॉलिंग exit()एकतरफा कार्रवाई है जिसे पूर्ववत नहीं किया जा सकता है। इसीलिए why थ्रेडिंग ’और 'लाइब्रेरियों’ दोनों के लिए सावधानीपूर्वक विचार की आवश्यकता है।
पिरोया गया कार्यक्रम
यदि कोई प्रोग्राम बहु-थ्रेडेड है, तो उपयोग exit()एक नाटकीय कार्रवाई है जो सभी थ्रेड्स को समाप्त करता है। संभवत: पूरे कार्यक्रम से बाहर निकलना अनुचित होगा। त्रुटि की रिपोर्ट करते हुए, धागे से बाहर निकलना उचित हो सकता है। यदि आप कार्यक्रम के डिजाइन से परिचित हैं, तो हो सकता है कि एकतरफा बाहर निकलने की अनुमति हो, लेकिन सामान्य तौर पर, यह स्वीकार्य नहीं होगा।
लाइब्रेरी कोड
और यह कि 'कार्यक्रम के डिजाइन का संज्ञान' खंड, पुस्तकालयों में कोड के लिए भी लागू होता है। कॉल करने के लिए सामान्य प्रयोजन लाइब्रेरी फ़ंक्शन के लिए यह बहुत कम सही है exit()। यदि मानक C लाइब्रेरी फ़ंक्शंस में से कोई एक त्रुटि के कारण वापस लौटने में विफल रहा, तो आप उचित रूप से परेशान होंगे। (जाहिर है, कार्यों की तरह exit(), _Exit(), quick_exit(), abort()नहीं वापसी करने का इरादा कर रहे हैं, अलग-अलग है।) सी पुस्तकालय में कार्यों इसलिए या तो "असफल नहीं हो सकता" या एक त्रुटि संकेत किसी भी तरह वापस जाएँ। यदि आप एक सामान्य उद्देश्य पुस्तकालय में जाने के लिए कोड लिख रहे हैं, तो आपको अपने कोड के लिए त्रुटि हैंडलिंग रणनीति पर सावधानीपूर्वक विचार करने की आवश्यकता है। यह उन कार्यक्रमों की त्रुटि हैंडलिंग रणनीतियों के साथ फिट होना चाहिए जिनके साथ इसका उपयोग करने का इरादा है, या त्रुटि हैंडलिंग को विन्यास योग्य बनाया जा सकता है।
मेरे पास पुस्तकालय कार्यों की एक श्रृंखला है (हेडर के साथ एक पैकेज में "stderr.h", एक नाम जो पतली बर्फ पर टिकता है) जो कि त्रुटि रिपोर्टिंग के लिए उपयोग किए जाने के रूप में बाहर निकलने का इरादा है। वे कार्य डिजाइन द्वारा बाहर निकलते हैं। एक ही पैकेज में फ़ंक्शन की संबंधित श्रृंखला होती है जो त्रुटियों की रिपोर्ट करती है और बाहर नहीं निकलती है। बाहर निकलने के कार्यों को गैर-बाहर निकलने के कार्यों के संदर्भ में कार्यान्वित किया जाता है, बेशक, लेकिन यह एक आंतरिक कार्यान्वयन विवरण है।
मेरे पास कई अन्य पुस्तकालय कार्य हैं, और उनमें से कई अच्छे "stderr.h"त्रुटि रिपोर्टिंग के लिए कोड पर निर्भर हैं । यह एक डिजाइन निर्णय है जो मैंने किया है और एक है जो मैं ठीक हूं। लेकिन जब त्रुटियों को बाहर निकलने वाले कार्यों के साथ सूचित किया जाता है, तो यह लाइब्रेरी कोड की सामान्य उपयोगिता को सीमित करता है। यदि कोड त्रुटि रिपोर्टिंग फ़ंक्शन को कॉल करता है जो बाहर नहीं निकलता है, तो फ़ंक्शन में मुख्य कोड पथ को त्रुटि रिटर्न से निपटने के लिए है - उन्हें पता लगाने और कॉलिंग कोड में एक त्रुटि संकेत को रिले करने के लिए।
मेरी त्रुटि रिपोर्टिंग पैकेज के लिए कोड मेरे में उपलब्ध है SOQ फ़ाइलों के रूप में GitHub पर (स्टैक ओवरफ़्लो प्रश्न) भंडार stderr.cऔर stderr.hमें src / libsoq उप-निर्देशिका।