2011-09-20 15 views
30

निम्नलिखित कोड मुझे उलझन मेंऑपरेशन सी = ए +++ बी का क्या अर्थ है?

int a=2,b=5,c; 
c=a+++b; 
printf("%d,%d,%d",a,b,c); 

मैं उत्पादन 3,5,8 होने की उम्मीद है, जिसका मुख्य कारण एक ++ का मतलब 2 +1 जो 3 के बराबर होती है, और 3 + 5 से 8 के बराबर होती है, इसलिए मैं उम्मीद 3, 5.8। यह पता चला है कि परिणाम 3,5,7 है। क्या कोई समझा सकता है कि यह मामला क्यों है?

+8

'ए ++ 'निश्चित रूप से' 2 + 1' का मतलब नहीं है। :) – jalf

+1

ये सिर्फ एक पुस्तक में अभ्यास हैं, लेकिन उन्होंने मुझे सोच लिया है। मैं उन्हें गलत मानता रहता हूं !, इसलिए इसका उत्पादन कोड या कुछ भी नहीं – user595985

+0

जब तक आप एक सी ++ पार्सर/कंपाइलर नहीं लिख रहे हैं, आपको कभी भी 'ए +++ बी' जैसे अभिव्यक्तियों के बारे में लिखना/सोचना नहीं चाहिए, जो बाद में कोड पढ़ रहे हैं आसानी से 'ए + (++ बी)' के रूप में व्याख्या कर सकता है जो 8 का मूल्यांकन करेगा। रिक्त स्थान और कोष्ठक मुक्त हैं और इस मामले में सभी के जीवन को आसान बना देंगे। –

उत्तर

87

यह c = a++ + b के रूप में पार्स है, और इसका मतलब है a++ बाद वेतन वृद्धि, यानि कि वेतन वृद्धि a का मूल्य लेने की गणना करने के a + b == 2 + 5 के बाद।

कृपया, कभी भी इस तरह के कोड लिखें।

+2

और यह नियम कौन सा कहता है कि इसे 'ए ++ + बी' के रूप में पार्स किया गया है, और' ए ++ बी 'के रूप में नहीं? टोकनिज़र लालची है? –

+1

मुझे लगता है कि यह कड़ाई से बाएं-सहयोगी होना चाहिए। – Patrick87

+0

@ ब्लागोवेस्ट बुयुक्लिव: अपने स्थानीय सी व्याकरण की जांच करें या [यह एक] (http://www.lysator.liu.se/c/ANSI-C-grammar-y.html)। –

6

एक ++ पद incrementing अभिव्यक्ति एक के मूल्य और लेता है तो कहते हैं 1.
है, अर्थात ग = ++ ए + बी आप क्या उम्मीद करेंगे।

1

ए ++ अभिव्यक्ति के बाद मूल्यांकन किया जाता है।

सी = ++ ए + बी; आपको जो सोचा था वह आपको देगा।

2

यह खराब प्रोग्रामिंग शैली का एक उदाहरण है।

यह काफी अपठनीय, लेकिन यह वेतन वृद्धि a पोस्ट तो यह b करने के लिए a के वर्तमान मूल्य का योग और बाद में a वृद्धि कर देता है!

1

पोस्ट वृद्धि ऑपरेटर, एक ++, अभिव्यक्ति में मूल्यांकन के मूल्य के बाद के tge मान को बदलता है। चूंकि मूल मूल्य 2 है, इसलिए इसका उपयोग सी की गणना करने के लिए किया जाता है; ++ का मूल्यांकन करने के बाद नए मान को प्रतिबिंबित करने के लिए एक का मूल्य बदला जाता है।

1

एक ++ + b ..it परिणाम 7 देता है और एक की अभिव्यक्ति मूल्य के बाद अद्यतन अभिव्यक्ति के रूप में पार्स किया गया है जिसके अनुसार पद वेतन वृद्धि ऑपरेटर

+0

ए ++ + बी 7 से 5 तक का मूल्यांकन करता है। उत्तर देने से पहले सोचें। –

+0

@ desprado07 सुधार के लिए धन्यवाद: इसे जानने के लिए डी –

39

Maximal Munch Rule ऐसी अभिव्यक्ति पर लागू होता है की वजह से 3 करने के लिए है, :

c = a++ + b; 

है, a बाद वृद्धि (a++) और इसलिए a के वर्तमान मूल्य (के बाद वेतन वृद्धि से पहले) b साथ + ऑपरेशन के लिए ले जाया जाता है।

+10

+1 "अधिकतम मर्च" कहा जाता है! –

1

Longest Match नियम के अनुसार इसे संकलक के व्याख्यात्मक विश्लेषण चरण के दौरान ++ + + बी के रूप में पार्स किया गया है। इसलिए परिणामी आउटपुट।

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