2010-11-09 38 views
11

क्यों, अगर मैं लिखनावापसी 0 वैकल्पिक क्यों है?

int main() 
{ 
    //... 
} 

मैं main समारोह के अंत में return 0; लिखने की जरूरत नहीं है? क्या संकलक मेरे लिए ऐसा करता है?

मैं जीसीसी/सी 99 का उपयोग करता हूं।

+0

संबंधित: http://stackoverflow.com/questions/204476/what-should-main-return-in-c-c – jball

+1

आप आमतौर पर अपने रिटर्न स्टेटमेंट को याद रखना चाहते हैं। यदि आप केवल अपने लिए छोटे कार्यक्रम लिखते हैं, तो आप शायद समस्याओं में भाग नहीं लेंगे। लेकिन यदि आप बड़े कार्यक्रम लिखते हैं या कई अलग-अलग गठबंधन करते हैं, तो अंतरफलक अपेक्षा के अनुसार व्यवहार करना अच्छा होता है। जब कोई प्रोग्राम 0 देता है, तो इसका अर्थ है कि यह सफलतापूर्वक समाप्त हो गया है, अन्य मान त्रुटि इंगित करते हैं। अपने कोड को काम करने के लिए कंपाइलर/मंच विशिष्ट कार्यों पर निर्भर करते हुए समस्याएं पैदा हो सकती हैं। –

उत्तर

14

सबसे हाल ही में सी (वर्तमान में है कि C99 में कुछ संशोधनों के साथ है) main से 0 रिटर्न डिफ़ॉल्ट रूप से अगर वहाँ समारोह के अंत में कोई स्पष्ट वापसी कथन है, और नियंत्रण समारोह के अंत (5.1.2.2 देखना बंद बहती है। 0 में C99 TC3)। ऐसा इसलिए होता है क्योंकि वैसे भी कोई भी इस तरह के रिटर्न का एक प्रकार लिखता है।

सी 8 9 में आपको कुछ वापस करने की ज़रूरत है - इसमें कोई अंतर्निहित वापसी नहीं है। लेकिन संकलक इस तरह की गलती का निदान करने के लिए आवश्यक नहीं है (में 3.6.6.4 और C99 TC3 में 6.9.1/12 देखें)।

-1

असल में, हाँ। कार्यों को कुछ भी वापस करने की आवश्यकता नहीं है, भले ही वे void के अलावा रिटर्न प्रकार घोषित करें। लौटाया गया मूल्य अपरिभाषित होगा।

ध्यान दें कि C99 को उन कार्यों की आवश्यकता होती है जो गैर-void रिटर्न प्रकारों को घोषित करते हैं, हमेशा रिटर्न स्टेटमेंट को मारकर समाप्त होते हैं। तो यदि आप अपने कंपाइलर के सी 99 मोड का उपयोग करके संकलित कर रहे थे तो इस कोड के परिणामस्वरूप संकलन-समय त्रुटि होगी।

+0

क्या आप इसकी पुष्टि करने के लिए सी 99 मानक के उचित हिस्से से लिंक कर सकते हैं? ऐसा लगता है कि जोहान्स शाएब - लिटब का जवाब है। –

+0

नहीं, यह दूसरा तरीका है –

+0

मैं यहां से पढ़ रहा था, जिसका दावा है कि यह सी 99 स्पेक का हिस्सा है। मैंने वास्तव में खुद को कल्पना नहीं की थी। http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr240.htm – cdhowie

18

सी 99 और सी ++ विशेष मामला main फ़ंक्शन 0 वापस करने के लिए यदि नियंत्रण स्पष्ट वापसी के बिना अंत तक पहुंच जाता है। यह केवलmain फ़ंक्शन पर लागू होता है।

C99 कल्पना के प्रासंगिक बिट main विशेष मामला

5.1.2.2.3 कार्यक्रम समाप्ति

के लिए 5.1.2.2.3 है मुख्य कार्य की वापसी प्रकार एक है int के साथ संगत टाइप करें, प्रारंभिक कॉल से पर मुख्य कार्य को
के साथ निकास फ़ंक्शन को तर्क के रूप में मुख्य फ़ंक्शन द्वारा लौटाए जाने के बराबर है; तक पहुँचने समाप्त हो जाता है } कि मुख्य फ़ंक्शन 0.

6.9.1/12

के एक मूल्य } समाप्त हो जाता है कि एक समारोह तक पहुँच जाता है, और समारोह कॉल के महत्व हैं कॉलर द्वारा उपयोग किया जाता है, व्यवहार अपरिभाषित है।(है एक विशेष मामले के मुख्य)

sandiego:$ gcc src/no_return.c -std=c89 -Wall 
src/no_return.c: In function ‘main’: 
src/no_return.c:2: warning: control reaches end of non-void function 
src/no_return.c: In function ‘foo’: 
src/no_return.c:1: warning: control reaches end of non-void function 

C99 मोड::

यह तो आपको जीसीसी के साथ परीक्षण कर सकते हैं:

int foo (void) { } 
int main(void) { } 

C89 मोड (दोनों कार्यों के लिए त्रुटियों)

sandiego:$ gcc src/no_return.c -std=c99 -Wall 
src/no_return.c: In function ‘foo’: 
src/no_return.c:1: warning: control reaches end of non-void function 
1

हां। main सी में एक बहुत ही विशेष कार्य है जिसमें कुछ अतिरिक्त नियम हैं। नीचे समाप्त होने के बारे में सी 99 मानक में अनुच्छेद देखें। संक्षेप में यह कहता है कि यदि आप किसी मूल्य को वापस किए बिना फ़ंक्शन छोड़ देते हैं तो यह बराबर है जैसे आपने 0 का वापसी मूल्य दिया था। यह main के लिए विशेष है, अन्य कार्यों के साथ ऐसा करना जहां कॉलिंग फ़ंक्शन से उम्मीद है कि रिटर्न वैल्यू आपके प्रोग्राम को क्रैश कर सकती है (और करेगा)।

तो मुख्य समारोह की वापसी प्रकार एक प्रकार पूर्णांक, मुख्य द्वारा दिया मूल्य के साथ बाहर निकलने के समारोह बुला को प्रारंभिक कॉल से एक वापसी के मुख्य कार्य बराबर है के साथ संगत है के रूप में कार्य करें; } तक पहुंचने से मुख्य फ़ंक्शन 0 का मान देता है। यदि वापसी प्रकार int के साथ संगत नहीं है, तो स्थिति वातावरण में लौटा दी गई स्थिति निर्दिष्ट नहीं है।

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