2010-03-03 20 views
5

यह एक बेवकूफ सवाल है लेकिन मैं हमेशा खुद को सोच रहा हूं कि मानक कौन सा है।सम्मेलन द्वारा शून्य लौटने का मतलब क्या है?

अधिकांश में (सभी को नहीं कहने के लिए) सी ++ पहले उदाहरण आप मुख्य फ़ंक्शन 0 मान लौटा सकते हैं। इसका मतलब है कि ऑपरेशन ठीक हो गया या नहीं?

  • 0 -> ठीक
  • 1 -> नहीं ठीक है।
  • अन्य ->?

ऐसा करने का मानक तरीका कौन सा है?

वैसे, क्या इस मामले में एक पूर्णांक या बूलियन वापस करना बेहतर है?

धन्यवाद दोस्तों!

+0

किसी कारण से आपने मुझे विधानसभा की याद दिला दी !! – medopal

उत्तर

6

0 या EXIT_SUCCESS का अर्थ सफलता से पहले चर्चा की गई है। EXIT_FAILURE का अर्थ विफलता है। कोई अन्य मूल्य कार्यान्वयन परिभाषित किया गया है, और समर्थित होने की गारंटी नहीं है। विशेष रूप से, std::exit(1) या return 1; वास्तव में असफलता को इंगित करने की गारंटी नहीं है, हालांकि अधिकांश सामान्य प्रणालियों पर वे करेंगे।

EXIT_SUCCESS और EXIT_FAILURE<cstdlib> में परिभाषित किए गए हैं।

संपादित करें:

  • 0: बाहर निकलें स्थिति शून्य अगर है

    GNU make उपयोगिता ऑपरेटिंग सिस्टम के लिए एक निकास स्थिति देता है: मैं इसे एक प्रणाली विशेष उदाहरण देने के लिए उपयोगी हो सकता है लगता है बनाना सफल है।

  • 2: मुठभेड़ों को किसी भी त्रुटि के कारण बाहर निकलने की स्थिति दो है। यह विशेष त्रुटियों का वर्णन करने वाले संदेशों को प्रिंट करेगा।
  • 1: बाहर निकलें स्थिति एक है अगर आप `-q 'ध्वज का उपयोग करें और बनाने के निर्धारित करता है कि कुछ लक्ष्य पहले से ही तारीख तक नहीं है।

विफलता के कई अलग-अलग मान सेट करने की क्षमता का अर्थ है कि आप यह निर्दिष्ट कर सकते हैं कि आपका प्रोग्राम कैसा असफल रहा। afaik

  • इस पर "सामान्य" OSes काम करेंगे (विंडोज़, ओएस एक्स, यूनिक्स)

    • विफलता स्थिति कोड के लिए कोई सम्मेलन नहीं है, है, लेकिन यह सी द्वारा गारंटी नहीं है ++: वहाँ दो चेतावनियां रहे हैं, तथापि मानक; इसलिए यदि आप वीएमएस या कुछ एम्बेडेड सिस्टम को पोर्ट करने का प्रयास करते हैं तो यह काम नहीं कर सकता है।
  • +0

    यह इंगित करने लायक हो सकता है कि लिनक्स पर यदि किसी सिग्नल द्वारा कोई एप्लिकेशन समाप्त कर दिया जाता है, तो इसका निकास कोड सिग्नल संख्यात्मक मान होगा (उदा। एसआईजीएसईजीवी के लिए 11)। लेकिन हाँ, EXIT_SUCCESS और EXIT_FAILURE – sbk

    2

    0 ठीक है, अन्य मान एक त्रुटि कोड हैं। मुख्य कार्य मानक के अनुसार एक int और कुछ भी वापस नहीं करना चाहिए। इस प्रश्न पर What should main() return in C and C++?

    0

    जल्दी सी में वहाँ कोई अपवाद नहीं अवधारणा थी। तो प्रोग्रामर ने त्रुटि कोड का उपयोग करके खुद को मदद की और परिभाषित 0 को कोई त्रुटि नहीं दी। अन्य सभी त्रुटि कोड को अपने स्वयं के अर्थ, प्रोग्रामर द्वारा परिभाषित किया गया है।

    यह योजना सी ++ के लिए लिया गया था। लेकिन आजकल आप भी त्रुटियों पर अपवाद फेंक (जो एक बेहतर OOP शैली है) की अवधारणा है।वह मुख्य अभी भी int का उपयोग करता है क्योंकि रिटर्न वैल्यू के ऐतिहासिक कारण हैं।

    +0

    के अलावा कोई भी मानक नहीं है, 'मुख्य' से बाहर निकलने के लिए अपवाद फेंकना आम तौर पर अच्छा अभ्यास नहीं है। –

    +0

    क्योंकि यह एक अपरिचित अपवाद का कारण बन जाएगा और अन्य कार्यक्रम उन अपवादों को पकड़ नहीं सकते हैं। – Aurril

    +0

    मेरा मुद्दा यह है कि प्रश्नकर्ता विशेष रूप से 'मुख्य' के बारे में पूछ रहा था, सामान्य रूप से कार्यों से वापसी मूल्यों के बारे में नहीं। –

    0

    यह एक नियम नहीं है, लेकिन एक डिजाइन निर्णय के अधिक के रूप में एक वापसी मान 'सामान्य' या 'के रूप में माना जाता है

    0 (, हालांकि अगर मैं सही ढंग से याद करते हैं, POSIX जैसे कुछ मानकों उनकी परिभाषा है) ठीक । जहां, जब आप कुछ other than 0 वापस करते हैं, तो यह ठीक या त्रुटि हो सकता है। उदाहरण के लिए, यदि आप read() कॉल जारी करते हैं, तो यह सकारात्मक मान के रूप में पढ़ने वाले बाइट्स की संख्या वापस कर सकता है - जो निश्चित रूप से कोई त्रुटि नहीं है। लेकिन, अगर यह 0 देता है तो इसका मतलब फाइल अंत होता है। इससे कोई नकारात्मक मूल्य पढ़ने में कुछ त्रुटि होगी।

    +0

    यह एक डिज़ाइन निर्णय है कि सी ++ मानक लेखकों ने बनाया: 0 'मुख्य' से लौटने पर सफलता का अर्थ है। –

    0
    1. शून्य का अर्थ। यह वास्तव में कक्षा/समारोह डिजाइन पर निर्भर करता है। यह दस्तावेज़ीकरण का हिस्सा होना चाहिए कि ग्राहकों को वापसी मूल्य का इलाज कैसे करना चाहिए। उदाहरण के लिए, COM विधियां शून्य सफल ऑपरेशन को इंगित करने के लिए वापस लौटें (S_OK शून्य के बराबर स्थिर है)। विंडोज़ फाइल ऑपरेशंस (CreateFile इत्यादि) सफल ऑपरेशन के मामले में गैर-शून्य लौटाएं। आप देखते हैं, यह निर्भर करता है। इसके बारे में एकमात्र सम्मेलन यह हो सकता है: कोड को दस्तावेज किया जाना चाहिए !!!
    2. वापस करने के लिए बेहतर क्या है। मुझे लगता है, int अधिक जटिल कार्यों के लिए बेहतर हो सकता है (जहां आपको संभावित त्रुटि का विश्लेषण करने की आवश्यकता हो सकती है)। चूंकि int और bool आम तौर पर EAX रजिस्टर में लौटा दिया जाता है (यह मानते हुए आप वास्तुकला पर कर रहे हैं), बिना किसी अतिरिक्त स्मृति एक bool के बजाय एक int वापस जाने के लिए आवश्यक है।
    0

    मूल रूप से वापसी मूल्य एक त्रुटि कोड से मेल खाता होगा। कल्पना करें कि कार्यक्रम के सभी संभावित गलत परिणामों की एक बड़ी तालिका है। कार्यक्रम समाप्त हो गया है; आप जानना चाहते हैं कि, अगर कुछ भी गलत हो गया है। यदि एक गैर-शून्य पूर्णांक लौटाया गया था, तो आप इसे त्रुटि कोड की अपनी तालिका में देखेंगे। यदि 0 लौटाया गया है, तो यह "कुछ भी गलत नहीं हुआ" के बराबर है।

    मैं केवल यह कि जिस तरह से डाल दिया है क्योंकि कभी कभी लोगों को लगता है यह unintuitive कि 0 कुछ अच्छा होता है। यह तरह का गिलास पूरी तरह खाली है ... जहर का।

    0

    यह सी/यूनिक्स विरासत का अवशेष है। स्क्रिप्ट पता करने के लिए के लिए कि क्या आपके कार्यक्रम सफल रहा था

    अपने कार्यक्रम एक स्क्रिप्ट के भीतर बुलाया जा रहा है, है उपयोगी है। इस प्रकार, निष्पादन योग्य कार्यक्रमों से सफलता के लिए 0 लौटने का सम्मेलन पैदा हुआ था।

    सी में देशी बुलियन प्रकार नहीं थे, इसलिए यह एक पूर्णांक था। और इसने हमें विभिन्न प्रकार की त्रुटियों के लिए अलग-अलग संख्याएं वापस करने की अनुमति दी।

    यह सम्मेलन तब नियमित कार्यों में फैल गया, जैसा कि अन्य ने पोस्ट किया है, सी/सी ++ में मूल रूप से अपवाद नहीं थे, और यहां तक ​​कि एक बार हमारे अपवाद भी थे, उन्होंने अनुशासन को सही तरीके से उपयोग करने के लिए लिया, और वहां बहुत सारी विरासत थी कोड (और विरासत प्रोग्रामर) वापसी मान परंपरा का उपयोग करके।

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

    +0

    यह बहुत देर हो चुकी है। लेकिन क्या आप कहेंगे कि लिपि में चेक की स्थिति किसी प्रकार की होगी और इसलिए 0 को वापस करने का विचार और अगर नियंत्रण को तोड़ दिया जाए? –

    +1

    हाँ, ऐसा कुछ। या उन्हें एक कमांड लाइन पर एक साथ चिपकाया जा सकता है और इसलिए पहले कमांड की विफलता शॉर्ट-सर्किट होगी और दूसरी प्रक्रिया को कॉल करने से रोक देगा। – JohnMcG

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