संभव डुप्लिकेट:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)पोस्ट-बढ़ते क्रम में ऑपरेटर: अनपेक्षित व्यवहार
मेरे कोड इस प्रकार है:
#include <stdio.h>
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
में वृद्धि के बाद अपने शुरुआती मूल्य को असाइन किया जाना चाहिए।
इसके बजाय, तथापि, मैं इस मिल:
x: 11
y: 11
विधानसभा में खुदाई, यह मेरे लिए एक विचार पसंद की तरह दिखता है:
LCFI2:
movl $10, -4(%rbp) // this is x
movl $0, -8(%rbp) // this is y
incl -4(%rbp) // x is simply incremented
movl -4(%rbp), %esi
leaq LC0(%rip), %rdi
movl $0, %eax
call _printf
movl -4(%rbp), %eax // now x is saved in a register,
movl %eax, -8(%rbp) // copied to y,
incl -4(%rbp) // and finally incremented
movl -8(%rbp), %esi
leaq LC1(%rip), %rdi
movl $0, %eax
call _printf
यहाँ क्या हो रहा है? क्या जीसीसी मुझे खुद से बचाने की कोशिश कर रहा है? मेरे पास भाषा संदर्भ आसान नहीं है लेकिन मैंने सोचा होगा कि यह इच्छित अर्थशास्त्र को तोड़ देता है।
घृणित कामों रूप में लिखा जाएगा !!! –
http://en.wikipedia.org/wiki/Sequence_point – Ken
बुरे पुराने दिनों में, कुछ भाषाओं में 'ए = 1 + ए' एक खदान था जो सभी नई बग चलती थीं। –