2013-02-18 22 views
12

मैं PHP में बहुत कुशल हूँ, लेकिन मैं सी के साथ dabbling शुरू कर दिया है मैं कार्यों कि कोई मान नहीं है के अंत में कोडतो वास्तव में "वापसी 0" का क्या अर्थ है?

return 0; 

देखा है। इसका उपयोग PHP में नहीं किया जाता है, क्योंकि यदि किसी फ़ंक्शन में वापसी नहीं होती है, तो एक मान NULL स्वचालित रूप से वापस आ जाता है।

मैं बस इतना पूछ रहा हूं, सरल अंग्रेजी में, return 0 वास्तव में क्या करता है? क्या यह PHP की तरह है, जहां यह फ़ंक्शन कॉल के मान के रूप में अपना तर्क देता है? क्या यह सिर्फ अच्छा अभ्यास है?

मुझे पता है कि इस सवाल से कई बार पूछा गया है, लेकिन मैं इसे एक PHP डेवलपर के दृष्टिकोण से पूछ रहा हूं। गूगल फेंकने वाले जवाब संक्षिप्त नहीं हैं।

+4

'कार्यों के अंत है कि एक मान' नहीं लौटते पर आप' void' कार्यों मतलब है? –

+0

सी के बारे में पता नहीं है लेकिन कुछ भाषाओं को उन कार्यों में शून्य (जैसा: संख्या या: स्ट्रिंग) की आवश्यकता है जो मान वापस नहीं करते हैं। – Gustavo

+0

@Cicade क्षमा करें - हाँ, यही मेरा मतलब है। – Starkers

उत्तर

15

क्या यह php की तरह है, जहां यह फ़ंक्शन कॉल के मान के रूप में अपना तर्क देता है? क्या यह सिर्फ अच्छा अभ्यास है?

हां, PHP और कई अन्य भाषाओं ने 'सी' से return कीवर्ड उधार लिया। और सभी भाषाओं में, return कीवर्ड में एक ही फ़ंक्शन है - फ़ंक्शन से वापस आने के लिए। return कीवर्ड का पालन करने वाला कुछ भी वह मान है जो कॉलर को वापस कर दिया जाता है।

क्या यह एक अच्छा अभ्यास है? हां और नहीं। सभी कार्यों एक मान वापस करना चाहिए। और मानक लाइब्रेरी में भी कुछ, यहां तक ​​कि कोई मूल्य वापस न करें। इसलिए उनका रिटर्न टाइप void है।

लेकिन main फ़ंक्शन 0 (EXIT_SUCCESS) को यह सुनिश्चित करने के लिए वापस करना चाहिए कि प्रोग्राम सफलतापूर्वक निष्पादित हो गया है। और -1 अन्यथा (भी EXIT_FAILURE)

संपादित करें: (@KeithThompson के लिए धन्यवाद):

EXIT_FAILURE कार्यान्वयन परिभाषित किया गया है। 1EXIT_FAILURE का एक सामान्य मान है लेकिन पूरा बिंदु यह है कि आपको पता नहीं है।

+1

आह, मैं देखता हूं। बहुत बढ़िया जवाब। मुझे पता है कि यह एक साधारण सवाल है, लेकिन मैं परियोजनाओं में खुद को फेंकने से पहले अपने सिर में 100% सब कुछ स्पष्ट करना चाहता हूं! – Starkers

+0

@JWH यह बहुत अच्छा है। प्रोग्रामिंग –

+1

प्रोग्रामिंग करते समय मैं विचार की स्पष्टता का समर्थन करता हूं 'EXIT_FAILURE' का मान कार्यान्वयन-परिभाषित है। यह * नहीं * आमतौर पर '-1' है; '1' अधिक आम है। लेकिन पूरा मुद्दा यह है कि आपको यह जानने की ज़रूरत नहीं है कि मूल्य क्या है। –

6

कार्य का एक पूर्णांक सी वापसी पूर्णांक में डिफ़ॉल्ट रूप से, लौटा रहा है, अगर कोई अन्य वापसी प्रकार परिभाषित किया गया है। यदि 0 कॉलर वापसी मूल्य को देख रहा है, तो यह सुनिश्चित करने के लिए कि 0 कुछ यादृच्छिक मूल्य के विपरीत फ़ंक्शन एक ज्ञात मान देता है, तो वापसी 0 अच्छा अभ्यास होगा।

+6

यह ध्यान देने योग्य है कि यह एएनएसआई सी है, और आधुनिक सी (सी 99 और नए) अनुमानित प्रकारों को हतोत्साहित या अस्वीकार करते हैं। –

+0

यह c89 केवल –

+0

के साथ मामला है क्या यह वास्तव में एक अच्छा कार्य है कि लोगों को किसी फ़ंक्शन के रिटर्न वैल्यू का निरीक्षण करने के लिए प्रोत्साहित किया जाए जिसे एक मूल्य वापस नहीं किया गया है? – aroth

8

ऐतिहासिक कारणों से, return 0; लिखने के लिए एक समारोह है कि void घोषित किया गया है, इसलिए तरह से वापस जाने के लिए संभव है:

void foo(/* arguments */) 
{ 
    /* do things */ 
    return 0; 
} 

यह कुछ नहीं करता है, और 0 (या जो भी आप वहाँ डाल) दूर फेंक दिया गया है। इसके अलावा, यदि आप ऐसा करते हैं तो समझदार कंपाइलर्स आपको चेतावनी संदेश देंगे। तो ऐसा मत करो।

1

सी प्रोग्रामिंग भाषा मुख्य समारोह से बाहर निकलने या वापस करने की अनुमति देता है ताकि पूर्णांक लौटकर या मैक्रोज़ EXIT_SUCCESS और EXIT_FAILURE लौटकर सफलता या विफलता को सिग्नल किया जा सके। यूनिक्स पर ये क्रमशः 0 और 1 के बराबर हैं। एक सी प्रोग्राम exit() फ़ंक्शन का भी उपयोग कर सकता है जो पूर्ण पैरामीटर के रूप में पूर्णांक स्थिति या निकास मैक्रो निर्दिष्ट करता है।

मैक्रोज़ EXIT_SUCCESS और EXIT_FAILURE के अलावा, सी मानक रिटर्न कोड के अर्थ को परिभाषित नहीं करता है। रिटर्न कोड के उपयोग के नियम अलग-अलग प्लेटफॉर्म पर भिन्न होते हैं।

0

सी में आपको केवल एक मूल्य वापस करने की ज़रूरत नहीं है यदि आप इसकी शुरुआत में शून्य के साथ एक समारोह घोषित करते हैं। पहले उदाहरण:

#include <stdio.h> 
int main() 
{ 
    printf("Hello World!"); 
    return 0; // you have to use return because main starting with int 
} 

दूसरा उदाहरण:

#include <stdio.h> 
void main() 
{ 
printf("Hello World!"); 
//in this case return is useless, main is a void function 

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