2015-02-22 18 views
5
#include <iostream> 

int main(){ 
    std::cout << main << std::endl; 
    return 0; 
} 

यह कमांड लाइन में 1 प्रिंट क्यों करता है?क्यों std :: cout << main << std :: endl prints 1?

+2

जिज्ञासा से बाहर, क्या आप उम्मीद कर रहे हैं * * मुद्रित करने के लिए इस कोड को? इस मामले में मुख्य एक समारोह सूचक है। –

+0

@ जोनाथन रेनहार्ट: क्या यह है? याद रखें 'मुख्य' विशेष है ... – Deduplicator

+1

यह शायद अपरिभाषित व्यवहार है। आप मुख्य नाम नहीं होगा। Http://stackoverflow.com/questions/2128321/can-main-function-call-itself-in-c/2128727#2128727 देखें। – juanchopanza

उत्तर

5

आपका कार्यक्रम खराब है। N4140:

§3.6.1/3 फ़ंक्शन main किसी प्रोग्राम के भीतर उपयोग नहीं किया जाएगा।

§4.3/1 समारोह प्रकार T कर सकते हैं का एक lvalue: [...]

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

§4.12/1 अंकगणित, अनिश्चित गणना, सूचक, या सदस्य प्रकार के सूचक के लिए अंक bool के प्रकार के रूप में परिवर्तित किया जा सकता है। शून्य मान, शून्य सूचक मान, या शून्य सदस्य सूचक मान false में परिवर्तित किया गया है; कोई अन्य मान true में परिवर्तित कर दिया गया है। प्रत्यक्ष-प्रारंभिकरण (8.5) के लिए, std::nullptr_t का एक प्रावधान bool के प्रकार के रूप में परिवर्तित हो सकता है; परिणामी मान false है।

यदि आप ऐसा करने पर जोर देते हैं, तो कोशिश:

std::cout << (void*)main << std::endl; 
+0

उस भाग को न भूलें जहां 'std: : ostream' में '<<' ऑपरेटर नहीं है जो हस्ताक्षर 'int (*) (शून्य) 'के साथ फ़ंक्शन पॉइंटर स्वीकार करता है, यही कारण है कि पॉइंटर को किसी अन्य प्रकार में परिवर्तित किया जा रहा है। –

+0

[इस quuestion] में (http://stackoverflow.com/a/2741896/995714) मैंने देखा कि 'मुख्य' कई बार –

+0

@ LưuVĩnhPhúc सी है। मैंने अब तक कोई मानक उद्धरण नहीं देखा है कि यह बीमार है सी में सुधार –

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