2011-10-17 7 views
5

पर विचार करें:क्यों उत्पादन अभिव्यक्ति में सी और जावा में अलग मीटर ++ + (++ मी)

int m = 2, n; 

n = m++ + (++m); 

सी उत्पादन में है:

m = 4, n = 4; 

जावा उत्पादन में है:

m = 4, n = 5; 

यह कैसे होता है?

+0

आप किस कंपाइलर का उपयोग करते हैं? वही कोड मेरे लिए एम = 4 और एन = 6 देता है (विज़ुअल स्टूडियो 2010) –

+0

ऐसा इसलिए है क्योंकि आप एक ही चर को बिना किसी अनुक्रमित बिंदु के कथन में बदल सकते हैं। यह सी – Dani

+0

में अपरिभाषित व्यवहार का कारण बनता है मैं जीसीसी का उपयोग कर रहा हूं। – phoxis

उत्तर

9

यह भिन्न हो सकता है क्योंकि सी एक सही प्रोग्राम को ऐसी अभिव्यक्ति रखने की अनुमति नहीं देता है - सी ऐसे प्रोग्राम के व्यवहार को परिभाषित नहीं करता है। यह सी कंपेलरों को व्यापक अक्षांश देता है कि वे इस तरह के अभिव्यक्तियों की व्याख्या कैसे करते हैं।

जावा इस तरह के अभिव्यक्तियों के अपेक्षित व्यवहार को परिभाषित करके अधिक कड़ाई से कार्यान्वयन को बाधित करता है।

(नियम यह है कि सी में यह तोड़ता है कि एक अभिव्यक्ति किसी ऑब्जेक्ट के मान को एक से अधिक अंतराल अनुक्रम बिंदु के बिना संशोधित नहीं कर सकती है)।

+1

"सी एक सही प्रोग्राम को ऐसी अभिव्यक्ति रखने की अनुमति नहीं देता है।" हाँ यह करता है; यह सिर्फ अपने व्यवहार को निर्दिष्ट नहीं करता है। वही बात नहीं है। – EJP

+0

@EJP: ऐसा एक कार्यक्रम सही नहीं है। – caf

+0

यदि ऐसा कोई प्रोग्राम सही नहीं है तो संकलक इसे संकलित नहीं करना चाहिए। – EJP

3

जैसा ऊपर बताया गया है, आपको उस तरह कोड नहीं लिखना चाहिए। यह अनुक्रम अंक एट अल के बारे में है ;-)

इस व्याख्यान http://www.slideshare.net/olvemaudal/deep-c

यह बहुत उपयोगी है की जांच करें।

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