2013-03-11 6 views
5

पाइथन से आने वाले सी ++ के लिए नौसिखिया के रूप में, मुझे यकीन नहीं है कि क्यों C++ किसी फ़ंक्शन के बाहर कोड (वैश्विक नामस्थान में) की अनुमति नहीं देता है। ऐसा लगता है कि यह मुख्य() कहा जाता है या अन्य कार्यों को घोषित करने से पहले कुछ प्रारंभिक करने के लिए उपयोगी हो सकता है। (मैं कंपाइलर के साथ बहस करने की कोशिश नहीं कर रहा हूं, मैं इसे इस तरह कार्यान्वित करने के पीछे विचार प्रक्रिया को जानना चाहता हूं।)कार्यों में सी ++ कोड क्यों शामिल होना चाहिए?

+0

फ़ंक्शन की अनुपस्थिति में, इस तरह के कोड को कैसे निष्पादित किया जाएगा? –

+0

'मुख्य' से पहले कोड निष्पादित करने के अभी भी तरीके हैं जिनमें गन्दा वैश्विक कोड शामिल नहीं है। – chris

+1

यह सब उपयोगी नहीं लगता है। –

उत्तर

12

जब आप एक अजगर प्रोग्राम चला रहे हैं, तो दुभाषिया इसे से ऊपर तक चलाता है नीचे चला जाता है नीचे निष्पादन। सी ++ में, ऐसा नहीं होता है। कंपाइलर आपके सभी कार्यों को मशीन कोड के छोटे ब्लब्स में बनाता है और फिर लिंकर उन्हें हुक करता है। रनटाइम पर, ऑपरेटिंग सिस्टम आपके main फ़ंक्शन को कॉल करता है, और सबकुछ वहां से चलता है। उस संदर्भ में, कार्यों के बाहर कोड अर्थहीन है - यह कब चल जाएगा?

+0

इस उत्तर ने एक महत्वपूर्ण विचार के साथ बहुत मदद की है कि मैं अपने सीखने सी ++ में कुछ हद तक चमक गया था; अर्थात् यह एक संकलित भाषा है। –

+0

मुझे लगता है कि यह सी के लिए भी मामला है? –

+0

हां, यह सी के लिए समान है। –

1

मुख्य() कार्यक्रम के लिए पहुंच बिंदु है। तो आप जिस भी कोड को लिखना चाहते हैं उसे उस बिंदु से निष्पादन का आदेश होना चाहिए।

मुख्य() निष्पादित होने से पहले स्थिर चर शुरू किए जाते हैं, ताकि आप इससे पहले जो भी चर आवश्यक हो, शुरू कर सकें।

लेकिन यदि आप प्रोग्राम की स्थिति शुरू करने वाले रन कोड चाहते हैं, तो आपको इसे प्रोग्राम की शुरुआत में ही करना चाहिए, और स्थिर चर का दुरुपयोग करना चाहिए और इसे कुछ कन्स्ट्रक्टर करना चाहिए।

3

इसे सी ++ और पायथन के बीच शैली अंतर के रूप में माना जा सकता है। हालांकि, इसके लिए बहुत अच्छे कारण भी हैं। सी और सी ++ में, एक बहुत स्पष्ट और विशिष्ट स्थान है कि आपके कोड का निष्पादन शुरू होता है, और यह 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() फ़ंक्शन के साथ पंजीकृत फ़ंक्शन।

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