2009-12-16 10 views
6

दोनों सी ++ स्टैंडर्ड 1998 और 2003 संस्करणों की धारा 3.6.1.2 में,सी ++ मानक शून्य मुख्य() प्रोटोटाइप को प्रतिबंधित करता है?

कार्यान्वयन मुख्य कार्य पूर्वनिर्धारित नहीं होगी। यह फ़ंक्शन ओवरलोड नहीं किया जाएगा। यह में रिटर्न प्रकार प्रकार int है, लेकिन अन्यथा इसका प्रकार कार्यान्वयन-परिभाषित है।

मैं मूल अंग्रेजी स्पीकर नहीं हूं। मुझे यकीन नहीं है कि "लेकिन अन्यथा" क्या मतलब है। क्या यह अन्य रिटर्न प्रकार को प्रतिबंधित करना है, या सी ++ कंपाइलर लेखक का अधिकार देना है?

तो जवाब क्या है?

उत्तर

12

अंग्रेज़ी आप बोली main घोषित void वापस जाने के लिए निषेध करता है। यह उन तर्कों में भिन्नता की इजाजत देता है जो आने वाले हैं, लेकिन रिटर्न प्रकार में नहीं।

+0

इस समाचार समूह में भाग लेने वालों के लिए पकड़ने के लिए एक पसंदीदा मद है। हालांकि, क्या कोई वापसी का प्रकार 'मुख्य' से 'शून्य 'कर सकता है? –

+0

क्षमा करें, मैं आपके प्रश्न का पालन नहीं करता हूं। मुख्य प्रकार के रिटर्न प्रकार प्राप्त करने की स्थिति में आप कहां होंगे? – bmargulies

+0

@bmargulies: किसी अन्य सी प्रोग्राम में जो पहले प्रोग्राम के परिणाम इनपुट के रूप में लिया? फिर भी, अजीब सवाल। –

7

आर्ग! हाँ यह करता है। मानक द्वारा अनुमत एकमात्र वापसी प्रकार int है। खंड 3.6.1 से उद्धृत करने के लिए:

यह के प्रकार पूर्णांक एक वापसी प्रकार होगा, लेकिन अन्यथा अपने प्रकार कार्यान्वयन परिभाषित किया गया है।

जिसका अर्थ यह ऐसा दिखाई दे सकता:

int main(float f); 
int main(int x, int y); 

आदि आदि

2

इस प्रकार में केवल वापसी प्रकार से अधिक है। इसलिए, वापसी प्रकार पूर्णांक होना चाहिए, लेकिन तुम मुक्त शेष तर्क पर विचार कर रहे हैं, यानी आप जैसे, का चयन कर सकते

int main(int argc, char **argv) 
+0

या int main (int argc, char ** argv, char ** env) linux –

+0

पर C++ मानक –

+0

द्वारा आवश्यक नहीं है लेकिन शायद संकलक की आवश्यकता है। –

0

जहाँ तक मापदंडों कर रहे हैं चिंता का विषय है, यह

की अनुमति देता है के रूप में के बीच
int main() 

और

  1. पूर्णांक मुख्य()

  2. पूर्णांक मुख्य (int argc, char * argv [])

  3. पूर्णांक मुख्य (int argc, char * argv [], चार * envr [])

लेकिन प्रति मानक वापसी प्रकार के रूप में पूर्णांक स्थिरता प्रयोजन के लिए होना चाहिए।

+0

संख्या 3 सी ++ मानक द्वारा आवश्यक नहीं है। –

+0

तीसरे की अनुमति है लेकिन सी ++ मानक द्वारा असीमित कई अन्य संभावित हस्ताक्षर के साथ आवश्यक नहीं है। पहले और दूसरे को एक अनुरूप कंपाइलर द्वारा अनुमति दी जानी चाहिए। –

+0

क्या यह कहना उचित होगा कि मानक पहले दो से परे पैरामीटर के किसी भी सेट को लेने की अनुमति देता है, लेकिन किसी और पैरामीटर तक पहुंच या तो कार्यान्वयन-परिभाषित व्यवहार (यदि कार्यान्वयन उन्हें परिभाषित करता है) या अपरिभाषित व्यवहार (यदि यह नहीं करता है) ?) – supercat

0

इरादा यह कहना है कि main प्रकार के पहलुओं को रिटर्न प्रकार के अलावा अन्य कार्यान्वयन परिभाषित किया गया है।इसका मतलब है कि इस घोषणा मानक के इस खंड द्वारा अनुमति दी है:

int main(int fred, char *bouncy); 

नहीं बल्कि यह एक:

void main(int fred, char *bouncy); 

इसकी वापसी प्रकार होना चाहिए int, लेकिन कार्यान्वयन अलग तर्क है करने के लिए अनुमति दी है प्रकार के।

1

मानक कह रहा है कि वापसी का प्रकार int होना चाहिए, लेकिन बाकी का प्रकार कार्यान्वयन पर निर्भर है। उदाहरण के लिए, आप एक मानक-अनुरूप (लेकिन बहुत उपयोगी नहीं) C++ कंपाइलर का उपयोग कर सकते हैं।

int main(int secondsSinceSystemStart, int myFavoriteNumber, char* aFunnyJoke) 

Wikipedia से:

int main(void) 
int main(int argc, char **argv) 

मापदंडों argc, तर्क गणना, और:

सी और सी ++ में, मुख्य कार्य के समारोह प्रोटोटाइप निम्न में से एक की तरह लग रहा argv, तर्क वेक्टर, क्रमशः प्रोग्राम के कमांड लाइन तर्कों की संख्या और मूल्य देते हैं। Argc और argv के नाम किसी भी वैध पहचानकर्ता हो सकते हैं, लेकिन इन नामों का उपयोग करने के लिए यह आम सम्मेलन है। अन्य प्लेटफार्म-निर्भर प्रारूपों को सी और सी ++ मानकों द्वारा भी अनुमति दी जाती है; उदाहरण के लिए, यूनिक्स (हालांकि नहीं POSIX.1) और Microsoft विजुअल C++ stdlib.h में getenv के माध्यम से एक तीसरा तर्क कार्यक्रम के माहौल देने के लिए है, अन्यथा सुलभ:

int main(int argc, char **argv, char **envp) 

मैक ओएस एक्स और डार्विन युक्त एक चौथा पैरामीटर इस तरह क्रियान्वित द्विआधारी के लिए पथ के रूप में मनमाने ढंग से ओएस की आपूर्ति जानकारी,:

int main(int argc, char **argv, char **envp, char **apple) 
संबंधित मुद्दे