2012-02-25 31 views
16

सी ++ में एंट्री पॉइंट के रिटर्न टाइप को void पर क्यों सेट किया गया है हमेशा बाद में निराश हो गया, और बाद में मानक द्वारा हटा दिया गया और आधुनिक कंपाइलर्स द्वारा प्रतिबंधित है? इसे बुरा अभ्यास क्यों माना जाता है?शून्य मुख्य() के साथ गलत क्या था?

अब, के रूप में मैं समझता हूँ कि सी # और जावा दोनों प्रवेश बिंदु की वापसी प्रकार void यानी

static void main(String[] args) /* Java */ 
static void Main(string[] args) /* C# */ 

और सी # होने की अनुमति और जावा प्रोग्रामर यह बुरा व्यवहार पर विचार नहीं करते हैं, वे वास्तव में अक्सर इसका इस्तेमाल।

अन्य भाषाओं जो कर रहे हैं (केवल इरादा हो सकता है, मुझे शक है सी ++, इस दशक में सफल रहा हो जाएगा कम से कम) डी प्रोग्रामिंग भाषा की तरह C++ के संभावित उत्तराधिकारियों या वाला भी एक void main() अनुमति देते हैं। तो जैसा कि आप देख सकते हैं, मुझे संदेह है कि सी ++ समुदाय ने इसे मानक से हटा दिया क्योंकि यह बहुत अस्पष्ट या अलोकप्रिय था।

तो मेरा सवाल यह है कि सी ++ समुदाय ने void main() क्यों निकाला? इसके साथ गलत क्या था?

+1

विभिन्न भाषा डिजाइनर अलग-अलग निर्णय लेते हैं। इससे क्या फर्क पड़ता है? –

+0

@GregHewgill मैं इसे समझता हूं। लेकिन सी ++ डिजाइनरों ने किए गए फैसले को बनाने के कारण और कारण क्या थे? – ApprenticeHacker

+1

सीधे घोड़े के मुंह से: http: //www2.research.att.com/~bs/bs_faq2.html#void-main :) –

उत्तर

10

सी ++ मानकों की समिति ने मौजूदा कोड के बड़े निकाय के कारण int main() की आवश्यकता होने की संभावना है जो return कथन का उपयोग रनटाइम सिस्टम में एक विशिष्ट निकास कोड वापस करने के लिए किया जाता है। यह अपेक्षा करना अनुचित होगा कि मौजूदा कोड को exit() का उपयोग करने के लिए बदलने के लिए बदलेगा, इसलिए int main() मानक में एक आवश्यकता बना दी गई थी।

जावा जैसी एक भाषा, जब इसे डिज़ाइन किया गया था, उसके पास मौजूदा कोड का कोई भी निकाय नहीं था जिसके साथ इसे संगत रहने के लिए आवश्यक था। इसलिए, डिजाइनर void main() चुन सकते हैं और गैर-शून्य निकास कोड के लिए System.exit() के उपयोग की आवश्यकता होती है।

तो, बात यह है कि सी ++ मानक के लिए void main() चुनने होगा कि यह मौजूदा कोड return उपयोग करने की उम्मीद है कि और main() से एक निकास कोड मूल्य टूट जाएगा के साथ "गलत" होगा।

+1

मैं देखता हूं। इसलिए उन्होंने मौजूदा कोड के साथ संगतता के लिए 'int main()' चुना। लॉल, मुझे पता होना चाहिए था ...: डी – ApprenticeHacker

+2

मैंने प्रारंभिक सी ++ मानकों की बैठकों में भाग नहीं लिया लेकिन मुझे संदेह है कि समिति वास्तव में कुछ भी चुनती है: वापसी मूल्य का उपयोग सी ++ का हिस्सा इसकी शुरुआत से ही था क्योंकि इसका मतलब था अनिवार्य रूप से सी सी का एक विस्तार होने के लिए अनिवार्य रूप से 'int' रिटर्न होने के लिए भी उपयोग किया जाता है (हालांकि आम तौर पर स्पष्ट रूप से घोषित किया जाता है: आप प्रारंभ में 'int' को छोड़ सकते हैं और संकलक केवल यह मान लेगा कि इसका मतलब यह है कि) यदि कोई प्रोग्राम सफल हुआ तो स्वचालित रूप से बताने का। यदि किसी कार्यक्रम का नतीजा 'शून्य' है, तो यह कोई संकेत नहीं देता है कि यह सफल रहा है या नहीं। –

8

आप आमतौर पर अपने कार्यक्रम की बाहर निकलने की स्थिति जानना चाहते हैं। यही कारण है कि आपके पास int main() है - आप अपनी निकास स्थिति वापस कर देते हैं।

3

यह गलत है क्योंकि सी ++ मानक कानूनी main के रूप में निर्दिष्ट नहीं है। कोई भी अन्य भाषाओं को निर्दिष्ट करने की परवाह नहीं करता है। सी ++ कार्यक्रमों के लिए, केवल सी ++ मानक प्रासंगिक है, और यह int कहता है।

+2

सवाल, दूसरे शब्दों में, यही कारण है कि? –

+0

@ सोफियान: सवाल पूछता है कि यह वैध क्यों नहीं है। # – Puppy

+1

_ यह गलत है क्योंकि यह सी ++ मानक निर्दिष्ट नहीं है ... _only सी ++ मानक प्रासंगिक_ है। lol, इससे मैं इकट्ठा करता हूं कि 'सी ++ मानक == नवीनतम दिव्य नियम ' – ApprenticeHacker

10

सी ++ में कभीvoid main() की अनुमति है, हालांकि कुछ कंपाइलर इसे या तो एक्सटेंशन के रूप में अनुमति दे सकते हैं या सिर्फ इसलिए कि वे इसका निदान नहीं करते हैं।

इसी तरह सी ने कभी भी एक्सटेंशन के अलावा void main() की अनुमति नहीं दी है; उसी 1989 मानक ने void कीवर्ड को main: int main(void) और int main(int argc, char *argv[]) के लिए दो मानक परिभाषाओं को परिभाषित किया।

अन्य भाषाएं इसे अनुमति देती हैं क्योंकि, वे अन्य भाषाएं हैं।

int main() के बजाय void main() लिखने में सक्षम होने में कोई विशेष लाभ नहीं है। आपको स्पष्ट रूप से मूल्य वापस करने की आवश्यकता नहीं है; main के अंत से गिरने return 0; (सी ++ में, और सी में सी 99 से शुरू होने के बराबर) के बराबर है।

+0

+1। हालांकि, जब इसे कभी अनुमति नहीं दी गई है, तब भी बजेर्न स्ट्राउस्ट्रप ने खुद को "शून्य मुख्य" लिखा है, अर्थात् दूसरे संस्करण में (और शायद पहले में, मैंने जांच नहीं की) "सी ++ प्रोग्रामिंग भाषा" की। यह सिर्फ एक यादगार चीज है, जैसे कई अन्य मनमाने ढंग से और अक्सर अपमानजनक सम्मेलन। –

+0

@ चीयर्संधथ.-अल्फ: मैंने अभी टीसी ++ पीएल के दूसरे संस्करण (9वीं प्रिंटिंग, मुझे लगता है) की जांच की है, और 'शून्य मुख्य() 'के संदर्भ में कोई संदर्भ नहीं देखा - हालांकि कम से कम एक घटना है 'main()' एक अंतर्निहित 'int' रिटर्न प्रकार के साथ (भाषा अब उस परमिट नहीं करती है)। मैंने इंडेक्स से 'मुख्य' के सभी संदर्भों की जांच की। क्या मेरे पास संस्करण में सुधार हुआ था, या क्या मुझे कुछ याद आया? –

+1

ठीक है, अब आप की तरह, बजेर्ने इस दावे के बारे में थोड़ा संदेहजनक था कि उसने 2006 में ऐसा कुछ भी किया था। उदाहरण के लिए देखें। [http://groups.google.com/group/comp.lang.c++/msg/1fc435ef004677be](http://groups.google.com/group/comp.lang.c++/msg/1fc435ef004677be), जहां मैंने उत्तर दिया "पहला उदाहरण मैंने अब धारा 7.3.2, पृष्ठ 233 के अंत में पाया"। मेरे पास यह पुस्तक अब और अब उपलब्ध नहीं है, लेकिन मुझे लगता है कि मेरा खुद का रेफ सही था। :-) –

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