पाइथन से आने वाले सी ++ के लिए नौसिखिया के रूप में, मुझे यकीन नहीं है कि क्यों C++ किसी फ़ंक्शन के बाहर कोड (वैश्विक नामस्थान में) की अनुमति नहीं देता है। ऐसा लगता है कि यह मुख्य() कहा जाता है या अन्य कार्यों को घोषित करने से पहले कुछ प्रारंभिक करने के लिए उपयोगी हो सकता है। (मैं कंपाइलर के साथ बहस करने की कोशिश नहीं कर रहा हूं, मैं इसे इस तरह कार्यान्वित करने के पीछे विचार प्रक्रिया को जानना चाहता हूं।)कार्यों में सी ++ कोड क्यों शामिल होना चाहिए?
उत्तर
जब आप एक अजगर प्रोग्राम चला रहे हैं, तो दुभाषिया इसे से ऊपर तक चलाता है नीचे चला जाता है नीचे निष्पादन। सी ++ में, ऐसा नहीं होता है। कंपाइलर आपके सभी कार्यों को मशीन कोड के छोटे ब्लब्स में बनाता है और फिर लिंकर उन्हें हुक करता है। रनटाइम पर, ऑपरेटिंग सिस्टम आपके main
फ़ंक्शन को कॉल करता है, और सबकुछ वहां से चलता है। उस संदर्भ में, कार्यों के बाहर कोड अर्थहीन है - यह कब चल जाएगा?
इस उत्तर ने एक महत्वपूर्ण विचार के साथ बहुत मदद की है कि मैं अपने सीखने सी ++ में कुछ हद तक चमक गया था; अर्थात् यह एक संकलित भाषा है। –
मुझे लगता है कि यह सी के लिए भी मामला है? –
हां, यह सी के लिए समान है। –
मुख्य() कार्यक्रम के लिए पहुंच बिंदु है। तो आप जिस भी कोड को लिखना चाहते हैं उसे उस बिंदु से निष्पादन का आदेश होना चाहिए।
मुख्य() निष्पादित होने से पहले स्थिर चर शुरू किए जाते हैं, ताकि आप इससे पहले जो भी चर आवश्यक हो, शुरू कर सकें।
लेकिन यदि आप प्रोग्राम की स्थिति शुरू करने वाले रन कोड चाहते हैं, तो आपको इसे प्रोग्राम की शुरुआत में ही करना चाहिए, और स्थिर चर का दुरुपयोग करना चाहिए और इसे कुछ कन्स्ट्रक्टर करना चाहिए।
इसे सी ++ और पायथन के बीच शैली अंतर के रूप में माना जा सकता है। हालांकि, इसके लिए बहुत अच्छे कारण भी हैं। सी और सी ++ में, एक बहुत स्पष्ट और विशिष्ट स्थान है कि आपके कोड का निष्पादन शुरू होता है, और यह main()
फ़ंक्शन की शुरुआत है (बेशक, यह केवल सत्य का अनुमान है, लेकिन हम इसे अभी अनदेखा कर सकते हैं ।) दरअसल, एक सी/सी ++ प्रोग्राम main()
फ़ंक्शन के साथ शुरू होता है और समाप्त होता है - मेरी राय में - जब आप यह समझना चाहते हैं कि वास्तव में कोई प्रोग्राम क्या करता है तो बहुत मदद करता है। कार्यक्रम का उच्च स्तरीय प्रवाह स्पष्ट है। विकल्प के साथ इसकी तुलना करें; फ़ाइल के माध्यम से और कार्यों और क्या नहीं के बीच कोड बिखरे हुए कोड के साथ।
यहां तक कि एक सुव्यवस्थित और गैर-तुच्छ पाइथन प्रोग्राम में, आप अपने मुख्य शरीर को if __name__ == "__main__":
के तहत डालते हैं, है ना?
अब कुछ सामान जो कुछ और अधिक उन्नत हैं। main()
फ़ंक्शन को कॉल करने से पहले कोड चलाने के तरीके हैं। यहाँ उनमें से एक है:
#include <iostream>
using namespace std;
bool RunBeforeMain()
{
cout << "Before main()!" << endl;
return true;
}
// This variable here causes the above function to be called
bool ignore_this_variable = RunBeforeMain();
int main()
{
cout << "Start of main()" << endl;
return 0;
}
इसके अलावा, सभी वैश्विक चर के निर्माताओं और सभी static
वर्गों के सदस्यों और कुछ मंच पर निर्भर सामान main()
से पहले चलाए जा रहे हैं। आकस्मिक रूप से, main()
समाप्त होने के बाद कोड चलाने के तरीके हैं। वे आमतौर पर main()
से पहले बनाए गए ऑब्जेक्ट्स के विनाशक होते हैं, और atexit()
फ़ंक्शन के साथ पंजीकृत फ़ंक्शन।
- 1. जहां "शामिल" होना चाहिए C++
- 2. क्यों सी # ऑपरेटर अधिभार स्थिर होना चाहिए?
- 3. मुख्य स्थिर क्यों होना चाहिए?
- 4. क्यों प्रतिनिधि स्थिर होना चाहिए?
- 5. वास्तव में कोड कितना एक्स्टेंसिबल होना चाहिए?
- 6. सरणी 1 तत्व शामिल होना चाहिए
- 7. क्या एक इनपुट परत में पूर्वाग्रह न्यूरॉन शामिल होना चाहिए?
- 8. क्यों constexpr स्थिर होना चाहिए?
- 9. हेल्पर्स में एचटीएमएल क्यों नहीं होना चाहिए?
- 10. सी ++ किताबों में, सरणी बाध्य निरंतर अभिव्यक्ति होना चाहिए, लेकिन निम्न कोड क्यों काम करता है?
- 11. आपको स्पष्ट रूप से धागे में शामिल क्यों होना है?
- 12. क्या जावास्क्रिप्ट फ़ाइलों में बीओएम शामिल होना चाहिए या नहीं?
- 13. एरलांग हेडर (.hrl) फ़ाइल में क्या होना चाहिए और नहीं होना चाहिए?
- 14. सी # डिबगिंग कार्यों कि लैम्ब्डा शामिल भाव
- 15. ओओ क्या होना चाहिए और क्या नहीं होना चाहिए?
- 16. सी ++: निजी कार्यों को क्यों घोषित किया जाना चाहिए?
- 17. सी - अभिव्यक्ति एक परिवर्तनीय lvalue होना चाहिए
- 18. रेडक्स स्टोर क्यों क्रमबद्ध होना चाहिए?
- 19. क्या 'गेट' विधि नाम पैरामीटर का नाम शामिल होना चाहिए?
- 20. नियमित अभिव्यक्तियों में शामिल होना
- 21. फ़्लैटेड डेटा में शामिल होना
- 22. सी में एक सी ++ प्रोग्रामर डिजाइन सॉफ्टवेयर कैसे होना चाहिए?
- 23. हैश टेबल: क्यों आकार प्रधान होना चाहिए?
- 24. निरर्थक वस्तु का मूल्य होना चाहिए - क्यों?
- 25. जावा बीन्स को धारावाहिक क्यों होना चाहिए?
- 26. सी # में मेरा सामान्य होना चाहिए। लॉगिंग लॉगर एक उदाहरण सदस्य या स्थैतिक होना चाहिए?
- 27. Emacs एक्सटेंशन होना चाहिए?
- 28. जावा EventQueue। सब कुछ invokelater विधि में क्यों होना चाहिए?
- 29. इस सी ++ टेम्पलेट में इटरेटर प्रकार क्या होना चाहिए?
- 30. एमवीसी: एक दृश्य में कितना कोड होना चाहिए?
फ़ंक्शन की अनुपस्थिति में, इस तरह के कोड को कैसे निष्पादित किया जाएगा? –
'मुख्य' से पहले कोड निष्पादित करने के अभी भी तरीके हैं जिनमें गन्दा वैश्विक कोड शामिल नहीं है। – chris
यह सब उपयोगी नहीं लगता है। –