क्या अंतर है? जिसे प्राथमिकता दी जाती है, या मुझे क्रमशः प्रत्येक का उपयोग कब करना चाहिए?EXIT_FAILURE बनाम बाहर निकलें (1)?
उत्तर
exit(1)
(आमतौर पर) असफल समाप्ति को इंगित करता है। हालांकि, इसका उपयोग गैर पोर्टेबल है। उदाहरण के लिए, OpenVMS पर, exit(1)
वास्तव में सफलता का संकेत देता है।
केवल EXIT_FAILURE
असफल समाप्ति वापस करने के लिए मानक मान है, लेकिन 1
का उपयोग कई कार्यान्वयन में किया जाता है।
तो संक्षेप में प्रस्तुत करने के लिए:
आप पूरी तरह से पोर्टेबल कोड उपयोग लिखने के लिए चाहते हैं,
EXIT_FAILURE
विफलता मामले के लिए। जबकि,
सफलता के मामले में आप exit(0)
या EXIT_SUCCESS
का उपयोग कर सकते हैं।
ध्यान दें कि, EXIT_SUCCESS
या 0
दोनों समान हैं।
संदर्भ:
C99 मानक: 7.20.4.3 exit
समारोह
पैरा 5
अंत में, नियंत्रण मेजबान पर्यावरण के लिए दिया जाता है। यदि स्थिति का मान
zero
याEXIT_SUCCESS
है, तो सफलतापूर्वक समाप्त होने की स्थिति का एक कार्यान्वयन-डिज़ाइन फॉर्म लौटाया गया है। यदि स्थिति का मानEXIT_FAILURE
है, तो असफल समाप्ति की स्थिति के कार्यान्वयन-डीआईएफएड फॉर्म वापस आ गया है। अन्यथा वापस लौटाई गई स्थिति कार्यान्वयन-डीआईएफएड है।
कोड में 'निकास' फ़ंक्शन को और वर्णनात्मक बनाता है। –
उत्तर में कहा गया है: "विफलता मामले के लिए' EXIT_FAILURE'। " क्या आपका मतलब है: विफलता मामले के लिए "EXIT_FAILURE'?" –
@ विल्हेल्म ग्रे: हाँ। अच्छी तरह से देखा। –
EXIT_FAILURE
का उपयोग करें। यह एक स्थिर है जो पूरे ओएस में उपयोग किया जाता है। इसका मूल्य 1 से कुछ और हो सकता है और यह कोड में भी अधिक वर्णनात्मक है।
क्या यह * एकाधिक * ओएस के निरंतर स्थिर है? – Aerovistae
देखें http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html –
@ एयरोविस्टे: 'EXIT_FAILURE' सी मानक द्वारा निर्दिष्ट किया गया है, और 1 9 8 9 से रहा है। यह उपलब्ध होगा किसी भी उचित आधुनिक सी संकलक। इसका मान आम तौर पर '1' होता है, लेकिन यह हमेशा सही मान होगा जो वर्तमान ओएस में विफल प्रोग्राम निष्पादन को दर्शाता है। –
इस बात के लिए सम्मेलन हैं कि किस तरह के स्टेटस वैल्यू कुछ कार्यक्रमों को वापस करना चाहिए। सबसे आम सम्मेलन सफलता के लिए बस 0 और विफलता के लिए 1 है। कार्यक्रम जो तुलना करते हैं, एक अलग सम्मेलन का उपयोग करते हैं: वे मिलान करने के लिए स्थिति 1 का उपयोग करते हैं, और तुलना करने में असमर्थता को इंगित करने के लिए स्थिति 2। यदि मौजूदा सम्मेलन इसके लिए समझ में आता है तो आपके कार्यक्रम को मौजूदा सम्मेलन का पालन करना चाहिए।
कुछ गैर-पॉज़िक्स सिस्टम बाहर निकलने की स्थिति मानों के लिए विभिन्न सम्मेलनों का उपयोग करते हैं।
For greater portability
, आप क्रमशः विफलता के लिए पारंपरिक स्थिति मान के लिए मैक्रोज़EXIT_SUCCESS
औरEXIT_FAILURE
का उपयोग कर सकते हैं। वे फाइल stdlib.h में घोषित कर रहे हैं।
वास्तव में पोर्टेबल कोड के लिए, EXIT_FAILURE
पसंदीदा है।सी मानक केवल तीन मानों के लिए अर्थ परिभाषित करता है: EXIT_FAILURE
, 0
, और EXIT_SUCCESS
(0
और EXIT_SUCCESS
अनिवार्य रूप से समानार्थी के साथ)।
एक व्यावहारिक दृष्टिकोण से, अधिकांश सामान्य सिस्टम अन्य मान भी स्वीकार करते हैं। अगर स्मृति सेवा करता है, तो लिनक्स आपको किसी भी 8-बिट मान, और विंडोज 16-बिट मान वापस करने देगा। जब तक आप ईमानदारी से आईबीएम मेनफ्रेम, वीएमएस, आदि को पोर्ट करने की परवाह नहीं करते हैं, संभावना है कि आप उन अधिकांश प्रणालियों पर ध्यान नहीं देते हैं जो कम से कम 8-बिट रिटर्न मानों का समर्थन नहीं करेंगे।
बहुत समान प्रश्न: http://stackoverflow.com/q/8867871/827263 –