2010-10-18 12 views

उत्तर

42

3.6.1/1 - "एक कार्यक्रम एक वैश्विक समारोह मुख्य कहा जाता है, जो कार्यक्रम के नामित शुरुआत है शामिल होगा यह कार्यान्वयन से परिभाषित एक में एक कार्यक्रम है कि क्या है। फ्रीस्टैंडिंग पर्यावरण एक मुख्य कार्य को परिभाषित करने के लिए आवश्यक है [ध्यान दें: एक फ्रीस्टैंडिंग पर्यावरण, स्टार्टअप में और समाप्ति कार्यान्वयन से परिभाषित है, स्टार्टअप n की वस्तुओं के लिए कंस्ट्रक्टर्स के निष्पादन में शामिल है। स्थिर भंडारण अवधि के साथ amespace गुंजाइश; समाप्ति में स्थिर स्टोरेज अवधि वाले ऑब्जेक्ट्स के लिए विध्वंसक निष्पादन शामिल है। -जेंड नोट]

आपके उदाहरण में 'मुख्य' (प्रोग्राम एंट्री पॉइंट के रूप में लक्षित) नामस्थान फ़ंक्शन के रूप में है और इसलिए आपका कोड खराब बना हुआ है। इसका मतलब यह नहीं है कि आपके द्वारा किए गए कार्यों को 'मुख्य' परिभाषित नहीं किया जा सकता है। इसका मतलब यह है कि मुक्त स्थायी कार्यक्रम के लिए मानक परिभाषित हस्ताक्षर के अनुसार 'मुख्य' की वैश्विक नामस्थान स्कोप परिभाषा आवश्यक है। होस्टेड प्रोग्राम

+0

आह मैं देखता हूं, धन्यवाद! – shuttle87

4

लिंकर को "मुख्य" नामक वैश्विक फ़ंक्शन में शुरू करने के लिए प्रोग्राम के निष्पादन की व्यवस्था करने की आवश्यकता होती है। बेनिग का पूरा बिंदु अपने नामस्थान बनाने में सक्षम है - जैसा आपने किया है - चीजों को वैश्विक नामस्थान में डालने से बचाना है ताकि उन्हें गलती से अन्य कोड या लिंकर द्वारा उठाया न जाए। आप स्पष्ट रूप से कह रहे हैं "मैं इस फ़ंक्शन को मुख्य रूप से कॉल कर रहा हूं, लेकिन यह somenamespace के संदर्भ में केवल सार्थक है - यदि आपको somenamespace के बारे में पता नहीं है तो आप इसे ढूंढने में सक्षम नहीं होंगे या नहीं।"

कार्यान्वयन के अनुसार, आपके मुख्य प्रतीक का उलझन नाम नामस्थान के कारण अपेक्षित नाम से बदल दिया गया है, इसलिए लिंकर को केवल प्रतीकात्मक तालिका प्रविष्टि की आवश्यकता नहीं है।

22

लिंकर ::main की तलाश में है, ::somenamespace::main नहीं। main जिसे प्रोग्राम स्टार्टअप में कहा जाता है, वैश्विक नामस्थान में होना चाहिए।

@Chubsdad में pointed you at the relevant language in the standard that states this है। लेकिन मानक अब एक विचित्र 'मानक' में लिखा गया है जो कानूनी रूप से बहुत समानता रखता है। मुझे लगता है कि क्या हो रहा था के बारे में एक सादा अंग्रेजी बयान बेहतर हो सकता है।

नोट: इस कारण मानक लिखा गया है। मानक में आप चाहते हैं कि आप जिस शब्द का उपयोग करते हैं, उसके लिए एक बहुत ही सटीक और अच्छी तरह से परिभाषित अर्थ हो, और आप नहीं चाहते कि इसका अर्थ संदर्भ के आधार पर भिन्न हो क्योंकि यह मानक को समझना बहुत मुश्किल बनाता है। यह वास्तव में इस कारण के समान है कि कानूनी तरीके से ऐसा लगता है।

+2

कानूनी वकीलों को छोड़कर कॉपी-पेस्ट और अस्पष्ट संदर्भ के बहुत सारे भयानक हैं ... मानक कुछ हद तक नए विचार व्यक्त करते हैं, और मानक बहुत अच्छी तरह निहित है। – Potatoswatter

+2

मैं इस उत्तर से सहमत हूं। मानक को उद्धृत न करें जब तक यह भाषा का अस्पष्ट क्षेत्र न हो, उन्होंने विशेष रूप से इसके लिए पूछा, या आपको अपने दावों का समर्थन करने की आवश्यकता है। यह थकाऊ हो जाता है। – GManNickG

+0

@Potatoswatter - हाँ, यह सच है। कानूनी, आईएमएचओ, वास्तव में व्याख्या करना बहुत कठिन है क्योंकि यह 100 वर्षों के कानूनी इतिहास पर निर्भर करता है। जैसा कि आप कहते हैं मानक, सुंदर आत्म निहित है।इसमें ऐसे अनुभाग हैं जिनमें उपयोग किए जाने वाले सभी सटीक शब्दों को ध्यान से परिभाषित किया जाता है। – Omnifarious

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