पर विचार करें:क्यों उत्पादन अभिव्यक्ति में सी और जावा में अलग मीटर ++ + (++ मी)
int m = 2, n;
n = m++ + (++m);
सी उत्पादन में है:
m = 4, n = 4;
जावा उत्पादन में है:
m = 4, n = 5;
यह कैसे होता है?
पर विचार करें:क्यों उत्पादन अभिव्यक्ति में सी और जावा में अलग मीटर ++ + (++ मी)
int m = 2, n;
n = m++ + (++m);
सी उत्पादन में है:
m = 4, n = 4;
जावा उत्पादन में है:
m = 4, n = 5;
यह कैसे होता है?
यह भिन्न हो सकता है क्योंकि सी एक सही प्रोग्राम को ऐसी अभिव्यक्ति रखने की अनुमति नहीं देता है - सी ऐसे प्रोग्राम के व्यवहार को परिभाषित नहीं करता है। यह सी कंपेलरों को व्यापक अक्षांश देता है कि वे इस तरह के अभिव्यक्तियों की व्याख्या कैसे करते हैं।
जावा इस तरह के अभिव्यक्तियों के अपेक्षित व्यवहार को परिभाषित करके अधिक कड़ाई से कार्यान्वयन को बाधित करता है।
(नियम यह है कि सी में यह तोड़ता है कि एक अभिव्यक्ति किसी ऑब्जेक्ट के मान को एक से अधिक अंतराल अनुक्रम बिंदु के बिना संशोधित नहीं कर सकती है)।
जैसा ऊपर बताया गया है, आपको उस तरह कोड नहीं लिखना चाहिए। यह अनुक्रम अंक एट अल के बारे में है ;-)
इस व्याख्यान http://www.slideshare.net/olvemaudal/deep-c
यह बहुत उपयोगी है की जांच करें।
आप किस कंपाइलर का उपयोग करते हैं? वही कोड मेरे लिए एम = 4 और एन = 6 देता है (विज़ुअल स्टूडियो 2010) –
ऐसा इसलिए है क्योंकि आप एक ही चर को बिना किसी अनुक्रमित बिंदु के कथन में बदल सकते हैं। यह सी – Dani
में अपरिभाषित व्यवहार का कारण बनता है मैं जीसीसी का उपयोग कर रहा हूं। – phoxis