2012-02-25 4 views
8

क्या आप मुख्य समारोह में प्रवेश करने से पहले सी ++ में कुछ भी प्रिंट कर सकते हैं?क्या आप मुख्य समारोह में प्रवेश करने से पहले सी ++ में कुछ भी प्रिंट कर सकते हैं?

उत्तर :

यह ब्लूमबर्ग में साक्षात्कार सवाल यह है कि कुछ सामग्री के साथ printf बयान से एक वैश्विक चर बताए मूल्य पैदा करते हैं।

+2

तुम भी पूछना चाहिए * उन्हें * यदि आप एक) अपने कोड शैली गाइड को दिखाने के लिए, और ख) की एक प्रदर्शनीय टुकड़ा उनके कोडबेस से कोड। –

+4

@ केरेकस्क: किसी भी बड़े संगठन के रूप में (ब्लूमबर्ग में 3000 डेवलपर हैं), कोड की गुणवत्ता खराब से अच्छी होती है। 'मुख्य()' दर्ज करने से पहले कोड निष्पादित करने के बारे में प्रश्न पूरी तरह से अप्रासंगिक और उचित परिचय नहीं है। कैसे सुनिश्चित किया जाता है कि एक्सेस ऑब्जेक्ट्स का निर्माण कैसे किया जाता है, इस पर एक चर्चा के लिए। क्या यह दिन-प्रतिदिन मायने रखता है? शायद ऩही। ... और मैं ऊपर उद्धृत उत्तर के बारे में संदिग्ध होगा: वैश्विक चर दोनों और 'printf()' के उपयोग से मुझे आश्चर्य होगा। –

उत्तर

9
#include <iostream> 
struct X 
{ 
    X() 
    { 
     std::cout << "Hello before "; 
    } 
} x; 

int main() 
{ 
    std::cout << "main()"; 
} 

यह अच्छी तरह से गठित सी ++ प्रोग्राम प्रिंट

हैलो से पहले मुख्य()

तुम देखो, सी ++ मानक गारंटी देता है कि नाम स्थान-गुंजाइश चर के निर्माताओं (इस उदाहरण में , यह x) main() से पहले निष्पादित किया जाएगा। इसलिए, यदि आप ऐसी ऑब्जेक्ट के निर्माता में कुछ प्रिंट करते हैं, तो इसे main() से पहले मुद्रित किया जाएगा। QED

+0

बहुत अच्छा ......... –

+3

उत्तर में एक टुकड़ा गुम है: आप कैसे सुनिश्चित कर सकते हैं कि std :: cout इस बिंदु पर उपयोग करने के लिए सुरक्षित है? – Flexo

+0

@awoodland uhm ... क्योंकि मानक इसकी गारंटी देता है? (कठिन दावा, मैं साबित करने की कोशिश करूंगा :) –

0

हैडर फ़ाइल

class A 
{ 
    static A* a; 
public: 
    A() { cout << "A" ; } 
}; 

कार्यान्वयन फ़ाइल:

A* A::a = new A; 

खैर, स्टैटिक्स (और केवल नहीं) main को कॉल करने से पहले प्रारंभ कर रहे हैं।

संपादित

एक और एक:

bool b = /*(bool)*/printf("before main"); 

int main() 
{ 
    return 0; 
} 
+3

'नया' मेरी आंखें मेरी आंखें !!! – wilhelmtell

+0

@ विल्हेल्मटेल क्या इसके साथ गलत है? 'ए' में खुद को सदस्य के रूप में शामिल नहीं किया जा सकता है, और मैं एक बिंदु साबित करने के लिए एक और कक्षा लिखने के लिए आलसी था। –

8
#include <iostream> 

std::ostream & o = (std::cout << "Hello\n"); 

int main() 
{ 
    o << "Now main() runs.\n"; 
} 
+1

अच्छा एक !!!!!!! –

+1

बेशक, आप नहीं चाहते कि 'ओ' वैश्विक स्तर पर दिखाई दे:' नेमस्पेस {std :: ostream & o (std :: cout << "हैलो \ n"); } 'या' स्थिर std :: ostream & o (std :: cout << "हैलो \ n"); 'लेकिन ये विवरण हैं। –

+1

यदि ऑपरेटर <<() 'आपको फेंकता है तो आपको कोई समस्या है। – wilhelmtell

0
#include <iostream> 
using namespace std; 

int b() { 
    cout << "before "; 
    return 0; 
} 
static int a = b(); 

int main() { 
    cout << "main\n"; 
} 
संबंधित मुद्दे