2012-03-03 8 views
35

संभव डुप्लिकेट:
Error handling in C code
What return value should you use for a failed function call in C?क्या मुझे सफल फ़ंक्शन के लिए 0 या 1 वापस करना चाहिए?

मैं हमेशा 0 है, लेकिन इसकी वास्तव में पठनीय नहीं का उपयोग करता है, तो में है, जबकि, आदि

मैं वापस चाहिए 1? सफलता के लिए मुख्य समारोह 0 क्यों लौटाता है?

+1

लिंक किया गया प्रश्न बंद था। – bernie

+0

@AdamBernier: एक डुप्लिकेट के रूप में। इसमें कुछ अत्यधिक प्रासंगिक उत्तर थे। –

+0

@ ओली: यह उचित प्रतीत नहीं होता है कि दूसरा प्रश्न डुप्लिकेट के रूप में बंद कर दिया गया था (शायद मैं इसे देख नहीं रहा हूं)। फिर भी मैं इसे बंद करने के साथ सहमत हूं और यह एक: इस विशेष वेबसाइट के लिए प्रश्न बहुत खुले लगते हैं। – bernie

उत्तर

33

यह सी मानक द्वारा सफलता के लिए 0 के रूप में परिभाषित किया गया है (क्रेडिट एचवीडी पर जाते हैं)।

But

अधिक से अधिक पोर्टेबिलिटी के लिए, आप मैक्रो EXIT_SUCCESS और सफलता और विफलता , क्रमशः के लिए पारंपरिक स्थिति मूल्य के लिए EXIT_FAILURE उपयोग कर सकते हैं। वे फाइल stdlib.h में घोषित कर रहे हैं।

(मैं मूल्य के बारे में बात कर रहा हूँ से ओएस के लिए लौट आए मुख्य, बाहर निकलने या इसी तरह के कॉल)

अपने कार्य के रूप में, लौट आप क्या चाहते हैं और अधिक पठनीय कोड बनाता है, के रूप में जब तक आप इसे अपने कार्यक्रमों के साथ इस तरह रखते हैं।

+0

0 हमेशा सफलता का मतलब है, लेकिन सिस्टम के आधार पर अन्य निकास कोडों को सफलता का अर्थ भी दिया जाता है। – hvd

+0

@hvd यह सच नहीं है। 'EXIT_SUCCESS' और' EXIT_FAILURE' के मान सी मानक में परिभाषित नहीं हैं। –

+2

@AndrewMarshall 'EXIT_SUCCESS' के पास 0 से कुछ अन्य मूल्य हो सकता है, लेकिन फिर भी, 'वापसी 0;' * भी * का अर्थ सफलता है। – hvd

-4

यदि आप एक बुलियन स्थिति लौट रहे हैं, तो आप int टाइप कर सकते हैं और इसका उपयोग कर सकते हैं। इससे आपके कार्यों का रिटर्न प्रकार स्पष्ट हो जाता है और आप (और अन्य) को यह जांचना नहीं होगा कि यह अच्छा के लिए 0 या 1 लौटाता है या नहीं।

typedef int BOOL; 
#ifndef TRUE 
#define TRUE 1 
#endif 

#ifndef FALSE 
#define FALSE 0 
#endif 

BOOL myfunc() 
{ 
    ... 
    return TRUE; 
} 
+9

आप मानक 'बूल' प्रकार को फिर से क्यों बनाएंगे? – hvd

+0

@hvd मुझे लगता है कि यह एक गलती होगी क्योंकि अगर आपने कभी भविष्य में सी ++ के खिलाफ कोड संकलित किया है तो आपको त्रुटियां मिलेंगी। आप पाठ्यक्रम के अन्य नाम चुन सकते हैं, उदाहरण के लिए 'bool_t' या कुछ। – trojanfoe

+2

सी और सी ++ दोनों में, आप 'शामिल कर सकते हैं और 'bool' प्रकार का उपयोग मैन्युअल रूप से टाइप किए गए टाइप के रूप में परिभाषित किए बिना कर सकते हैं।सी ++ में आपको '' की आवश्यकता नहीं है, लेकिन इसकी अनुमति है और हानिरहित है, और यदि आवश्यक हो तो आसानी से '#ifdef __cplusplus' में लपेटा जाता है। – hvd

10

कारण main सफलता के लिए 0 का उपयोग यह है कि इसे ऑपरेटिंग सिस्टम में एप्लिकेशन के बाहर निकलने के कोड के रूप में उपयोग किया जाता है, जहां 0 आमतौर पर सफलता का अर्थ है और 1 (या उच्चतर) विफलता का मतलब है। एक आवेदन के अंदर (बेशक, आप हमेशा पूर्व-निर्धारित मैक्रो EXIT_SUCCESS और EXIT_FAILURE उपयोग करना चाहिए।)

, तथापि, यह विफलता और सफलता के लिए गैर शून्य के लिए शून्य का उपयोग करने के लिए और अधिक स्वाभाविक है, के रूप में वापसी मान सीधे इस्तेमाल किया जा सकता if इनके रूप में:

if (my_func()) 
{ 
    ... 
} 
संबंधित मुद्दे