main
फ़ंक्शन को वैश्विक नामस्थान में गैर-सदस्य फ़ंक्शन के रूप में घोषित किया जाना चाहिए। इसका मतलब यह है कि यह एक वर्ग का स्थिर या गैर स्थैतिक सदस्य कार्य नहीं हो सकता है, न ही इसे नामस्थान (यहां तक कि नामित नामस्थान) में रखा जा सकता है।
नाम main
वैश्विक नामस्थान में एक समारोह के अलावा C++ में आरक्षित नहीं है। आप main
नामक अन्य संस्थाओं को घोषित करने के लिए स्वतंत्र हैं, जिनमें अन्य चीजें, कक्षाएं, चर, गणना, सदस्य कार्य, और गैर-सदस्य फ़ंक्शंस शामिल हैं, जो वैश्विक नामस्थान में नहीं हैं।
आप सदस्य फ़ंक्शन या नामस्थान में main
नामक फ़ंक्शन घोषित कर सकते हैं, लेकिन ऐसा फ़ंक्शन main
फ़ंक्शन नहीं होगा जो प्रोग्राम कहां से शुरू होता है।
main
फ़ंक्शन को static
या inline
के रूप में घोषित नहीं किया जा सकता है। इसे ओवरलोड नहीं किया जा सकता है; वैश्विक नामस्थान में main
नामक केवल एक ही कार्य हो सकता है।
main
फ़ंक्शन का उपयोग आपके प्रोग्राम में नहीं किया जा सकता है: आपको अपने कोड में कहीं से भी main
फ़ंक्शन कॉल करने की अनुमति नहीं है, और न ही आपको इसका पता लेने की अनुमति है।
वापसी का प्रकार main
int
होना चाहिए। कोई अन्य रिटर्न प्रकार की अनुमति नहीं है (यह नियम बोल्ड में है क्योंकि को 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()
विफलता को इंगित करने के लिए सफलता और शून्य-शून्य इंगित करने के लिए शून्य लौटने की उम्मीद है। आपको main()
में return
कथन स्पष्ट रूप से लिखने की आवश्यकता नहीं है: यदि आप main()
स्पष्ट return
कथन के बिना वापस आते हैं, तो यह वही है जैसे आपने return 0;
लिखा था।
int main() { }
int main() { return 0; }
दो मैक्रो, EXIT_SUCCESS
और EXIT_FAILURE
, <cstdlib>
में परिभाषित किया गया है कि यह भी सफलता और विफलता के क्रमश: इंगित करने के लिए main()
से लौटाया जा सकता हैं: निम्न दो main()
कार्यों समान व्यवहार किया है।
main()
द्वारा लौटाया गया मूल्य exit()
फ़ंक्शन पर भेज दिया गया है, जो प्रोग्राम को समाप्त करता है।
ध्यान दें कि यह सब केवल होस्टेड वातावरण के लिए संकलन करते समय लागू होता है (अनौपचारिक रूप से, एक ऐसा वातावरण जहां आपके पास पूर्ण मानक लाइब्रेरी है और आपके प्रोग्राम को चलाने वाला ओएस है)। एक फ्रीस्टैंडिंग पर्यावरण (उदाहरण के लिए, कुछ प्रकार के एम्बेडेड सिस्टम) के लिए सी ++ प्रोग्राम को संकलित करना भी संभव है, जिसमें स्टार्टअप और समाप्ति पूरी तरह कार्यान्वयन-परिभाषित होती है और main()
फ़ंक्शन की आवश्यकता भी नहीं हो सकती है। यदि आप एक आधुनिक डेस्कटॉप ओएस के लिए सी ++ लिख रहे हैं, हालांकि, आप एक होस्टेड वातावरण के लिए संकलित कर रहे हैं।
यह बहुत बारीकी से संबंधित है, या क्या करना चाहिए, की [डुप्लिकेट सी और सी ++ में 'मुख्य' वापसी] (http://stackoverflow.com/questions/204476/what-sho uld-मुख्य-रिटर्न-इन-सी और सी/18721336 # 18721336)। –
@ जोनाथन लेफ्लर कोई मजाक नहीं कर रहा है ... इसे लगभग 8 महीने पहले [संशोधन 6] (http://stackoverflow.com/revisions/204476/6) में डुप्लिकेट की सूची में जोड़ा गया था। – fredoverflow