2011-09-20 10 views
5

स्थानों मैं वापसी कोड मूल्यों इस तरह से किया जाता है देखा है, के अधिकांशसी में लिखे एक एम्बेडेड सिस्टम में वापसी कोड मूल्यों

सफल स्थिति वापसी, #define सफलता 0 और अन्य सभी के लिए अन्य कोई शून्य संख्या के लिए

त्रुटि मामलों

मेरा सवाल है, हम SUCCESS मामले के लिए शून्य क्यों हटाते हैं? क्या इसके लिए कोई विशिष्ट प्रोग्रामिंग सर्वोत्तम अभ्यास चिंताएं हैं?

/आर

+1

ऐतिहासिक कारणों से। http://stackoverflow.com/q/329950/184998 –

+0

ऊपर के लिंक में दूसरे और चौथे जवाब वास्तव में अच्छा कर रहे हैं: पिछली बार इस बाहर आया कोई भी एक निश्चित जवाब नहीं था। –

उत्तर

4

तो आप कह सकते हैं यह एक पुरानी सी आदत सफलता और त्रुटियों के लिए कुछ अन्य कोड के लिए 0 वापस जाएँ:

int error = do_stuff(); 
if (error) { 
    handle_error(error); 
} 

हालांकि, आम तौर पर दूसरी तरह के आसपास काम विधेय, लौटने 1 "सफलता" के लिए 1 (या true<stdbool.h> से)।

+0

यह एक ओएस सम्मेलन है। इसका सी –

+1

@Let_Me_Be से कोई लेना देना नहीं है: यह इस बात पर निर्भर करता है कि ओपी प्रोग्राम या फ़ंक्शन रिटर्न कोड को संदर्भित करता है या नहीं। यदि यह एक ओएस मुद्दा था, तो 'SUCCESS' को परिभाषित करने के बजाय, प्रोग्रामर को stdlib से' EXIT_SUCCESS' का उपयोग करना चाहिए था। –

+0

ओह, आप सही हो सकते हैं। –

2

यह एक ऑपरेटिंग सिस्टम सम्मेलन है।

http://en.wikipedia.org/wiki/Exit_status

+0

टिप –

+1

के लिए धन्यवाद, हालांकि किसी प्रोग्राम के निकास कोड का वर्णन करता है, क्यों नहीं कि यह सामान्य (और समझदार) फ़ंक्शन वापस करने के लिए क्यों है सफलता का संकेत देने के लिए 0। – nos

+1

यह न केवल कार्यक्रमों के बाहर निकलने की स्थिति में उपयोग किया जाता है। आम तौर पर '0' का अर्थ सफलता का होता है जब आप रिटर्न कोड का उपयोग न केवल सफलता/विफलता संकेतक के रूप में करना चाहते हैं, बल्कि एक त्रुटि कोड के रूप में भी करना चाहते हैं। फिर आप त्रुटि होने या नहीं होने के दो मामलों को आसानी से अंतर कर सकते हैं। –

3

शून्य अक्सर सफलता का मतलब है क्योंकि शून्य केवल पूर्णांक मान गलत का आकलन है। अन्य सभी पूर्णांक मान सत्य पर मूल्यांकन करते हैं और वे विभिन्न त्रुटि कोडों के लिए हैं।

यह थोड़ा अजीब और तार्किक रूप से उल्टा प्रतीत हो सकता है, लेकिन क्योंकि सफलता केवल सफलता है और त्रुटियां अलग-अलग हो सकती हैं, उपर्युक्त सम्मेलन अक्सर चुना जाता है।

वास्तव में, यह सबसे तर्कसंगत सम्मेलन है यदि किसी फ़ंक्शन का रिटर्न वैल्यू न केवल सफलता/विफलता संकेतक के रूप में उपयोग किया जाता है, बल्कि एक त्रुटि कोड के रूप में भी किया जाता है। त्रुटि कोड संग्रहीत है, तो एक अतिरिक्त उत्पादन पैरामीटर में कहते हैं, तो अधिक समझ में आता है विफलता के लिए सफलता के लिए 1 और 0 लौटने।

कल्पना कीजिए कि हालत 0 के मामले में किया जा रहा है सफलता होगा:

if (errcode = func()) { 
    /* error handling */ 
} 

बनाम अधिक बोझिल:

if ((errcode = func()) != 1) { 
    /* error handling */ 
} 
3

आप विभिन्न त्रुटियों के बीच differenciate करने के लिए है, वहाँ MaxInt - 1 अलग हो सकता है लोगों को।

यदि 0 एक त्रुटि थी और 1 सफलता थी, तो आप सभी त्रुटियों के बीच अंतर कैसे बता सकते हैं?

+0

यदि शून्य त्रुटि का मामला है तो मैं त्रुटि केस –

+0

जांचने के लिए उपयोग करूँगा लेकिन आप किस प्रकार की त्रुटि का सामना कर सकते हैं, अगर 0 एकमात्र चीज है जो त्रुटि को इंगित करती है? अक्सर आप और जानना चाहते हैं "एक त्रुटि हुई" आप जानना चाहते हैं कि क्या असफल रहा। आपको या तो फ़ंक्शन की अंतिम विफलता कोड में वैश्विक चर सेट करना होगा, या फ़ंक्शन तर्क सूची में पॉइंटर के माध्यम से कॉलर को त्रुटि को पास करना होगा। जो दोनों त्रुटि कोड लौटने की तुलना में बोझिल हैं – nos

संबंधित मुद्दे