2012-07-16 23 views
6

कृपया मुझे बताएं कि यह अलग-अलग व्यवहार क्यों करता है।आउटपुट अलग क्यों है?

int main() { 
    int p; 
    p = (printf("stack"),printf("overflow")); 
    printf("%d",p); 
    return 0; 
    } 

यह आउटपुट stackoverflow8 के रूप में देता है। हालांकि, अगर मैं paranthesis, तो निकालें:

p = printf("stack"),printf("overflow"); रूप stackoverflow5

उत्तर

13

The Comma Operator

अल्पविराम ऑपरेटर काम की तुलना में कम प्राथमिकता दी जाएगी (यह कि किसी भी ऑपरेटर की तुलना में कम पूर्वता है है उत्पादन देता है मामला), इसलिए यदि आप कोष्ठक हटाते हैं तो असाइनमेंट पहले होता है और दूसरी अभिव्यक्ति का परिणाम त्याग दिया जाता है। तो ...

int a = 10, b = 20; 
int x = (a,b); // x == 20 
int y = a,b; // y == 10 
// equivalent (in terms of assignment) to 
//int y = a; 

ध्यान दें कि तीसरी लाइन एक त्रुटि के रूप में यह यानी b की एक फिर से घोषणा, के रूप में व्याख्या की है कारण होगा:

int y = a; 
int b; 

मैं पहली बार में यह याद किया, लेकिन यह बनाता है समझ। यह a और b की आरंभिक घोषणा से अलग नहीं है, और इस मामले में अल्पविराम एक ऑपरेटर नहीं है, यह एक विभाजक है।

+2

int y = a, b; int y = a के बराबर है; और int बी; – h4ck3d

+0

समझ गया। धन्यवाद। – h4ck3d

+0

@ एडीएस। मैंने आपके कोड को जीसीसी के साथ करने की कोशिश की, और तीसरा कथन "बी 'की पुनर्विक्रय और" बी' त्रुटि की पिछली परिभाषा देता है। – abelenky

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