संभव डुप्लिकेट पर रिकर्सिव कॉल:
Can main function call itself in C++?मुख्य सी ++
मैं इस समस्या को बहुत ही दिलचस्प पाया लेकिन थोड़ा बाजीगर। प्रश्न 6.42 सी ++ डायटल द्वारा प्रोग्राम कैसे करें "क्या मुख्य रूप से आपके सिस्टम पर मुख्य रूप से कॉल किया जा सकता है? एक प्रोग्राम मुख्य रूप से एक प्रोग्राम लिखें। स्टेटिक स्थानीय वैरिएबल गिनती शामिल करें और 1 में प्रारंभ करें। पोस्ट-वृद्धि और प्रत्येक बार मुख्य रूप से गिनती के मूल्य को मुद्रित करें कहा जाता है। अपने कार्यक्रम संकलित करें। क्या?
मैं नीचे के रूप में कार्यक्रम में लिखा था, लेकिन इसके बजाय मैं प्रत्यावर्तन बंद हो जाता है के रूप में अगर मैं इसे चल कहीं भी होगी रखने के लिए थे 10 बार के बाद बंद हो जाता है 41000.
चारों ओर एक मूल्य पर किया होता मेरा प्रश्न: सी ++ में रिकर्सिवली मुख्य फ़ंक्शन को कॉल करना कानूनी कैसे है, क्या इस प्रोग्राम को प्रवाह या मेमोरी गलती आदि पर ढेर करने के लिए निष्पादित किया जाना चाहिए .. कृपया बताएं।
#include <iostream>
using namespace std;
int main()
{
static int count = 0;
count++;
if(count <= 10) {
cout << count << endl;
return main(); //call main
}//end if
system("pause");
return 0;//successful completion
}//end main
आप
मुझे लगता है कि यह अधिक मानव-पठनीय उद्धृत करने में भी मदद करता है, लेकिन कम सामान्य "§5.2.2 [expr.call]/9 – Cubbi
@ जेम्स से" मुख्य नाम के फ़ंक्शन को छोड़कर रिकर्सिव कॉल की अनुमति है, धन्यवाद आपके उत्तर के लिए - यदि सी ++ मानक उपर्युक्त कहता है - तो कंपेलरों द्वारा रिकर्सिव कॉल की अनुमति क्यों दी जाती है। मुझे समझने के लिए अजीब व्यवहार मिला। मैं आपके उत्तर की सराहना करता हूं। – Sinan
मैं सभी कंपाइलरों के लिए इसका उत्तर नहीं दे सकता, क्योंकि मैं केवल एक (विज़ुअल सी ++) से परिचित हूं और कुछ अन्य लोगों से कुछ परिचित हूं। हालांकि, मुझे लगता है कि 'मुख्य() 'का संकलन किसी अन्य कार्य की तरह संकलक द्वारा किया जाता है। विंडोज़ पर, 'मुख्य() 'ओएस द्वारा दर्ज एंट्री पॉइंट नहीं है: यह नहीं हो सकता है, क्योंकि सी रनटाइम को ग्लोबल्स को शुरू करने और निष्पादन के लिए पर्यावरण तैयार करने के लिए काम करना पड़ता है। ऐसा करने के बाद, सी रनटाइम आपके प्रोग्राम के 'मुख्य() 'को कॉल करता है। तो, यह वास्तव में सिर्फ एक और कार्य है, लेकिन _you_ को इसे कॉल करने की अनुमति नहीं है, केवल सी रनटाइम इसे कॉल कर सकता है। –