mainसमारोह ग्लोबल नेम स्पेस में एक गैर सदस्य समारोह के रूप में घोषित किया जाना चाहिए। इसका अर्थ है कि यह किसी वर्ग का स्थिर या गैर-स्थिर सदस्य कार्य नहीं हो सकता है, न ही इसे किसी नाम स्थान (यहां तक कि अनाम नाम स्थान) में रखा जा सकता है।
mainवैश्विक नामस्थान में एक फ़ंक्शन को छोड़कर सी ++ में नाम आरक्षित नहीं है। आप अन्य नामों की घोषणा करने के लिए स्वतंत्र हैं main, जिनमें अन्य चीजें, कक्षाएं, चर, गणना, सदस्य फ़ंक्शन और गैर-सदस्य फ़ंक्शन शामिल हैं जो वैश्विक नाम स्थान में नहीं हैं।
आप फ़ंक्शन फ़ंक्शन mainको सदस्य फ़ंक्शन या नामस्थान में घोषित कर सकते हैं , लेकिन ऐसा फ़ंक्शन ऐसा फ़ंक्शन नहीं होगा mainजो डिज़ाइन करता है जहां प्रोग्राम प्रारंभ होता है।
mainसमारोह के रूप में घोषित नहीं किया जा सकता staticया inline। यह भी अतिभारित नहीं किया जा सकता है; mainवैश्विक नाम स्थान में केवल एक फ़ंक्शन का नाम हो सकता है ।
mainसमारोह अपने कार्यक्रम में इस्तेमाल नहीं किया जा सकता: आप कॉल करने के लिए अनुमति नहीं है mainअपने कोड में कहीं से भी समारोह, न ही आप इसका पता लेने के लिए अनुमति दी जाती है।
वापसी का प्रकार mainहोना चाहिएint । किसी अन्य रिटर्न प्रकार की अनुमति नहीं है (यह नियम बोल्ड है क्योंकि यह गलत कार्यक्रमों को देखने के लिए बहुत आम है mainजो रिटर्न प्रकार के साथ घोषित करते हैं void; यह संभवतः mainफ़ंक्शन के विषय में सबसे अक्सर उल्लंघन किया जाने वाला नियम है )।
इसकी दो घोषणाएँ mainहोनी चाहिए:
int main() // (1)
int main(int, char*[]) // (2)
में (1) , वहाँ कोई मापदंड हैं।
में (2) , वहाँ दो मापदंडों हैं और वे पारंपरिक नाम हैं argcऔर argvक्रमश:। argvकार्यक्रम के तर्कों का प्रतिनिधित्व करने वाले सी स्ट्रिंग की एक सरणी के लिए एक संकेतक है। सरणी argcमें तर्कों की संख्या है argv।
आमतौर पर, argv[0]कार्यक्रम का नाम होता है, लेकिन यह हमेशा ऐसा नहीं होता है। argv[argc]एक शून्य सूचक होने की गारंटी है।
ध्यान दें कि सरणी प्रकार तर्क (जैसे char*[]) वास्तव में भेस में केवल एक सूचक प्रकार का तर्क है, निम्नलिखित दो (2) लिखने के लिए दोनों वैध तरीके हैं और वे दोनों बिल्कुल एक ही बात का अर्थ करते हैं:
int main(int argc, char* argv[])
int main(int argc, char** argv)
कुछ कार्यान्वयन अन्य प्रकार और मापदंडों की संख्या की अनुमति दे सकते हैं; आपको यह देखने के लिए अपने कार्यान्वयन के प्रलेखन की जांच करनी होगी कि यह क्या समर्थन करता है।
main()असफलता को इंगित करने के लिए शून्य और गैर-शून्य की वापसी की उम्मीद है। आपको स्पष्ट रूप से एक returnबयान लिखने की आवश्यकता नहीं है main(): यदि आप main()स्पष्ट returnविवरण के बिना वापसी करते हैं , तो यह वैसा ही है जैसा आपने लिखा था return 0;। निम्नलिखित दो main()कार्यों में समान व्यवहार है:
int main() { }
int main() { return 0; }
दो मैक्रोज़ हैं, EXIT_SUCCESSऔर इसमें EXIT_FAILUREपरिभाषित किया गया <cstdlib>है main(), क्रमशः सफलता और विफलता को इंगित करने के लिए से लौटाया जा सकता है।
द्वारा दिए गए मान main()को पारित कर दिया है exit()समारोह है, जो कार्यक्रम समाप्त हो जाता है।
ध्यान दें कि यह सब केवल एक होस्ट किए गए वातावरण (अनौपचारिक रूप से, आपके पास एक पूर्ण मानक पुस्तकालय है और वहाँ एक ओएस है जो आपका प्रोग्राम चला रहा है) के लिए संकलन करते समय लागू होता है। फ्रीस्टैंडिंग वातावरण (उदाहरण के लिए, कुछ प्रकार के एम्बेडेड सिस्टम) के लिए C ++ प्रोग्राम को संकलित करना भी संभव है, जिसमें स्टार्टअप और टर्मिनेशन पूरी तरह से कार्यान्वयन-परिभाषित हैं और एक main()फ़ंक्शन की आवश्यकता भी नहीं हो सकती है। यदि आप आधुनिक डेस्कटॉप OS के लिए C ++ लिख रहे हैं, हालांकि, आप एक होस्ट किए गए वातावरण के लिए संकलन कर रहे हैं।
mainलौटना चाहिए ।