संभव डुप्लिकेट:
मेरा कोड निम्नानुसार है:
#include & lt; stdio.h & gt; Int main () {int x = 10, y = 0; X = x ++; Printf ("x:% d \ n", x); Y = x ++; Printf ("y:% d \ n", y); } वेतनमान की प्रकृति को देखते हुए, मैं निम्नलिखित आउटपुट की अपेक्षा करता हूं:
x: 10 y: 10 मेरा तर्क है कि वेतनमान 5 के बाद, x को वेतनमान के प्रारंभ होने के बाद अपने प्रारंभिक मान को सौंपा जाना चाहिए।
इसके बजाय, मुझे यह मिलता है: विधानसभा>
LCFI2
x: 11 y: 11
: Movl $ 10, -4 (% rbp) // यह x $ movl $ 0, -8 (% rbp) है / यह y है -सीएल -4 (% आरबीपी) // एक्स सिर्फ बढ़ता है movl-4 (% rbp), % Esi leaq LC0 (% rip),% rdi movl $ 0,% eax call _printf movl -4 (% rbp),% eax // अब x एक रजिस्टर में सहेजा जाता है, movl% eax, -8 (% rbp) // वाई की प्रतिलिपि -4 (% आरबीपी) // और अंत में बढ़े हुए movl -8 (% rbp),% esi leaq LC1 (% rip),% rdi movl $ 0,% eax call _printf
डब्ल्यू टोपी यहाँ चल रहा है? जीसीसी मुझे खुद से बचाने की कोशिश कर रहा है? मेरे पास कोई भाषा संदर्भ नहीं है लेकिन मैंने सोचा होगा कि यह इच्छित शब्दों को तोड़ देगा।
व्यवहार को अपरिभाषित किया गया है क्योंकि x = x ++ में कोई हस्तक्षेप अनुक्रम बिंदु नहीं है, उदाहरण के लिए देखें ।
Comments
Post a Comment