दिलचस्प पोस्ट
सी # में एक सार वर्ग के कन्स्ट्रक्टर srand फ़ंक्शन समान मूल्यों को वापस कर रहा है जावास्क्रिप्ट ईएस 6 कक्षाओं में निजी संपत्तियां सी-जैसे, कन्स्ट्रक्टर और वर्दी आरम्भिकरण के बीच अंतर क्या हैं? टीएसक्यूएल का उपयोग कर डेटाबेस में सभी तालिकाओं की सूची कैसे प्राप्त करूं? अजगर में, जब एक शब्दकोश, सूची या सेट का उपयोग करें? आप विशेषकर वर्णमाला क्रम के बजाय ggplot2 x अक्ष का आदेश कैसे देते हैं? चलने के दौरान एक त्रुटि आई थी (डोमेन = लॉन्चसर्वाइसेज एरर, कोड = 0) मैं pkg (मैक ओएस एक्स) से स्थापित नोडजे की स्थापना कैसे करूं? किसी दिए गए लम्बाई की उपस्ट्रिंग में स्ट्रिंग कैसे विभाजित है? Array.prototype.push () कैसे विस्तारित करें? java.lang.IncompatibleClassChangeError: ऐप इंजिन में क्लास की तैनाती करना कार्यान्वित करना विशिष्ट प्रतिबद्ध निकालें गणना (एक ^ बी)% एमओडी एंड्रॉइड में अपना फोन नंबर प्राप्त करें

मुख्य की उचित घोषणा क्या है?

सी ++ में main फ़ंक्शन का उचित हस्ताक्षर क्या है? सही रिटर्न प्रकार क्या है, और main से एक मान वापस करने का क्या मतलब है? अनुमत पैरामीटर प्रकार क्या हैं, और उनका अर्थ क्या है?

क्या यह सिस्टम-विशिष्ट है? क्या उन नियमों को समय के साथ बदल दिया गया है? अगर मैं उनका उल्लंघन करता हूँ तो क्या होगा?

वेब के समाधान से एकत्रित समाधान "मुख्य की उचित घोषणा क्या है?"

वैश्विक नामस्थान में main फ़ंक्शन को गैर सदस्यीय समारोह के रूप में घोषित किया जाना चाहिए। इसका मतलब यह है कि यह एक क्लास के एक स्थिर या गैर-स्थिर सदस्य समारोह नहीं हो सकता है, न ही इसे एक नेमस्पेस में रखा जा सकता है (यहां तक ​​कि अनाम नाम स्थान भी)।

main नाम C ++ में आरक्षित नहीं है, केवल ग्लोबल नेमस्पेस में फ़ंक्शन के रूप में। आप अन्य नामों, अन्य चीजों, कक्षाएं, चर, संख्याओं, सदस्य कार्यों और गैर-सदस्यीय कार्यों, जिनमें वैश्विक नामस्थान में शामिल नहीं है, शामिल हैं, को नामित करने के लिए स्वतंत्र हैं।

आप किसी सदस्य फंक्शन के नाम पर या नाम स्थान में नामित फ़ंक्शन को घोषित कर सकते हैं, लेकिन ऐसा फ़ंक्शन main फ़ंक्शन नहीं होगा, जो यह निर्धारित करता है कि प्रोग्राम कहाँ शुरू होता है।

main फ़ंक्शन static या inline रूप में घोषित नहीं किया जा सकता है। यह अतिभारित भी नहीं हो सकता; ग्लोबल नेमस्पेस में main नाम केवल एक समारोह हो सकता है।

आपके कार्यक्रम में main फ़ंक्शन का उपयोग नहीं किया जा सकता है: आपको अपने कोड में कहीं से main फ़ंक्शन कॉल करने की अनुमति नहीं है, न ही आपको इसके पते पर जाने की अनुमति है।

main प्रकार का वापसी प्रकार int होना चाहिए कोई अन्य रिटर्न प्रकार की अनुमति नहीं है (यह नियम बोल्ड में है क्योंकि यह गलत कार्यक्रमों को देखने के लिए बहुत सामान्य है, जो कि वापसी के प्रकार के साथ main घोषित करता है; यह शायद 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 स्टेटमेंट को स्पष्ट रूप से लिखने की आवश्यकता नहीं है: यदि आप स्पष्ट return विवरण के बिना main() return देते हैं, तो यह वही है जैसा आपने लिखा था return 0; । निम्नलिखित दो main() फ़ंक्शंस में एक ही व्यवहार है:

 int main() { } int main() { return 0; } 

दो मैक्रोज़, EXIT_SUCCESS और EXIT_FAILURE , <cstdlib> में परिभाषित हैं, जो क्रमशः सफलता और विफलता का संकेत देने के लिए main() से भी वापस किया जा सकता है।

main() द्वारा दिया जाने वाला मान, exit() फ़ंक्शन को पारित किया जाता है, जो प्रोग्राम को समाप्त करता है।

ध्यान दें कि यह सब तब लागू होता है जब होस्ट किए गए वातावरण के लिए संकलित हो (अनौपचारिक रूप से, एक ऐसा वातावरण जहां आपके पास एक पूर्ण मानक पुस्तकालय है और आपके प्रोग्राम को चलाने वाला ओएस है)। एक फ्रीस्टैंडिंग वातावरण (उदाहरण के लिए, कुछ प्रकार के एम्बेडेड सिस्टम) के लिए सी ++ प्रोग्राम को भी संकलित करना संभव है, जिस स्थिति में स्टार्टअप और समापन पूरी तरह कार्यान्वयन-परिभाषित है और एक main() फ़ंक्शन की आवश्यकता भी नहीं हो सकती है। अगर आप आधुनिक डेस्कटॉप ओएस के लिए सी ++ लिख रहे हैं, हालांकि, आप होस्ट किए गए वातावरण के लिए संकलन कर रहे हैं

स्टैंडर्ड डॉक्स से। 3.6.1.2 मुख्य समारोह ,

इसमें वापसी प्रकार का प्रकार int होगा, लेकिन अन्यथा इसके प्रकार कार्यान्वयन-परिभाषित है। सभी कार्यान्वयन मुख्य के निम्नलिखित परिभाषाओं की अनुमति देगा:

int main() { / ... / } और int main(int argc, char* argv[]) { / ... / }

उत्तरार्द्ध रूप में argc कार्यक्रम में पर्यावरण के कार्यक्रम में पारित तर्कों की संख्या होगी। अगर argc नाजर है तो ये तर्क argv [0] में argv [argc-1] के माध्यम से संकेतक के रूप में प्रदान किए जाएंगे। शून्य-समाप्त किए गए multibyte तारों के शुरुआती अक्षर …..

उम्मीद है की वो मदद करदे..

दो वैध साधनएं int मुख्य () और int main (int, char * []) ​​हैं और कुछ भी संकलित नहीं हो सकता है या नहीं। यदि मुख्य रूप से कोई मान वापस नहीं लौटाता है, तो यह 0 परिलक्षित रूप से वापस आ जाता है।

नवीनतम प्रकाशित मानक (सी ++ 14) का सटीक शब्द है:

एक कार्यान्वयन दोनों को अनुमति देगा

  • () वापस लौटने के एक समारोह और

  • (int एक समारोह, char) करने के लिए सूचक करने के लिए सूचक char) int लौटने

main प्रकार के रूप में

इससे यह साफ हो जाता है कि वैकल्पिक वर्तनी को तब तक अनुमति दी जाती है जब तक कि main प्रकार का प्रकार int() या int(int, char**) । इसलिए निम्नलिखित भी अनुमति है:

  • int main(void)
  • auto main() -> int
  • int main ( )
  • signed int main()
  • typedef char **a; typedef int b, e; e main(bd, ac)

वापसी मूल्यों और उनके अर्थ पर विवरण

प्रति 3.6.1 ( [basic.start.main] ):

main में एक रिटर्न स्टेटमेंट main फ़ंक्शन को छोड़ने का प्रभाव होता है (स्वचालित संग्रहण अवधि के साथ किसी भी ऑब्जेक्ट को नष्ट कर देता है) और std::exit रूप में रिटर्न वेल्यू के साथ std::exit यदि return कथन का सामना किए बिना main नियंत्रण समाप्त हो जाता है, तो प्रभाव होता है निष्पादन की

 return 0; 

std::exit का व्यवहार अनुभाग 18.5 ( [support.start.term] ) में विस्तृत है, और स्थिति कोड का वर्णन करता है:

अंत में, मेजबान वातावरण में नियंत्रण वापस आ गया है। यदि स्थिति शून्य या EXIT_SUCCESS , तो स्थिति का एक कार्यान्वयन-परिभाषित रूप से सफल समापन वापस किया जाता है यदि स्थिति EXIT_FAILURE , स्थिति असफल समाप्ति का कार्यान्वयन-परिभाषित रूप दिया जाता है अन्यथा स्थिति लौटा दी गई है कार्यान्वयन-परिभाषित