परिचय: मुख्य प्रश्न जो पेशेवर भी पूछते हैं
\n\nक्या आपने कभी सोचा है कि C++ में हर प्रोग्राम int main() से क्यों शुरू होता है, न कि void main() से? और जब आप return 0 लिखते हैं तो वास्तव में क्या होता है? यह प्रश्न Stack Overflow पर एक वास्तविक हिट है, जिसने हज़ारों बार देखा और सैकड़ों टिप्पणियाँ प्राप्त की हैं। यह एक साधारण विषय प्रतीत होता है, लेकिन इसमें कई बारीकियाँ छिपी हैं जो C और C++ को अलग करती हैं, साथ ही शुरुआती और अनुभवी डेवलपर्स को भी।
इस लेख में हम केवल एक सूखा उत्तर नहीं देंगे। हम C और C++ में दृष्टिकोणों की तुलना करेंगे, मानकों का विश्लेषण करेंगे, वास्तविक कोड उदाहरण दिखाएंगे और बताएंगे कि main() के वापसी मान के साथ सही तरीके से कैसे काम करें, ताकि आपका कोड न केवल काम करे बल्कि पोर्टेबल भी हो। यदि आप C++ सीख रहे हैं या प्रतिदिन इसमें कोड लिखते हैं, तो यह लेख आपके लिए है।
संक्षिप्त उत्तर: C++ में main() को क्या लौटाना चाहिए?
\n\nयदि आप जल्दी में हैं, तो यहाँ सार है: C++ में main() फ़ंक्शन को int लौटाना चाहिए। यह मानक की एक सख्त आवश्यकता है (C++98 से C++23 तक)। वापसी मान ऑपरेटिंग सिस्टम को बताता है कि प्रोग्राम सफलतापूर्वक समाप्त हुआ या नहीं।
यहाँ न्यूनतम सही कोड है:
\n\n#include <iostream>\n\nint main() {\n std::cout << "Hello, World!" << std::endl;\n return 0; // सफल समाप्ति\n}\n\nलेकिन यह केवल हिमशैल का सिरा है। आइए गहराई में जाएँ।
\n\nint ही क्यों, void क्यों नहीं? ऐतिहासिक पृष्ठभूमि
\n\nC के शुरुआती संस्करणों में (ANSI C मानक से पहले), main() का प्रकार सख्ती से परिभाषित नहीं था। कई कंपाइलर void main() लिखने की अनुमति देते थे, और यह काम करता था। हालाँकि, मानकीकरण (C के लिए C89/C90 और C++ के लिए C++98) के आगमन के साथ, यह निर्णय लिया गया कि main() को ऑपरेटिंग सिस्टम को समाप्ति कोड लौटाना चाहिए।
क्यों? क्योंकि स्क्रिप्ट, Makefile और अन्य प्रोग्राम अक्सर जाँचते हैं कि आपकी प्रक्रिया कैसे समाप्त हुई। वापसी कोड 0 का अर्थ है "सफलता", और कोई भी गैर-शून्य मान "त्रुटि" (या एक विशिष्ट प्रकार की त्रुटि) को दर्शाता है। यदि main() void होता, तो आप यह जानकारी प्रसारित नहीं कर पाते।
C++ में स्थिति और भी सख्त है। C++ मानक (अनुभाग [basic.start.main]) सीधे कहता है: main() का प्रकार int होना चाहिए। कोई भी अन्य घोषणा (जैसे, void main()) एक कंपाइलर एक्सटेंशन है और कोड को अपोर्टेबल बनाती है।
C और C++ की तुलना: क्या अंतर है?
\n\nहालाँकि दोनों भाषाओं में int main() की आवश्यकता है, कुछ प्रमुख अंतर हैं:
- \n
- C++ में अंतर्निहित return 0: यदि आप
main()के अंत मेंreturnनहीं लिखते हैं, तो C++ स्वचालित रूप सेreturn 0डाल देता है। C में (C99 से शुरू) यह भी काम करता है, लेकिन पुराने मानकों (C89) में return की अनुपस्थिति अनिर्धारित व्यवहार का कारण बनती थी। \n - कमांड लाइन आर्गुमेंट: C++ में आप
int main(int argc, char* argv[])याint main()घोषित कर सकते हैं। C में पर्यावरण के साथ तीसरा विकल्प भी है (char* envp[]), लेकिन C++ में यह मानकीकृत नहीं है (हालाँकि कई कंपाइलर इसका समर्थन करते हैं)। \n - void main(): C में कुछ कंपाइलर (जैसे, एम्बेडेड सिस्टम के लिए)
void main()की अनुमति दे सकते हैं। C++ में यह एक गंभीर त्रुटि है, और कोड सख्त मोड में संकलित नहीं होगा। \n
C++ के लिए उदाहरण (हमेशा काम करता है):
\n\nint main() {\n std::cout << "C++ स्वचालित रूप से 0 लौटाएगा" << std::endl;\n // return 0; // लिखना आवश्यक नहीं है\n}\n\nC के लिए उदाहरण (पुराने मानकों में स्पष्ट return की आवश्यकता है):
\n\n#include <stdio.h>\n\nint main() {\n printf("C89 में स्पष्ट रूप से 0 लौटाना आवश्यक है\\n");\n return 0; // अनिवार्य\n}\n\nवापसी कोड का क्या अर्थ है? उदाहरणों के साथ विश्लेषण
\n\nवापसी कोड एक