Olası Çoğalt:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)Sonrası artır Operatör: Beklenmedik Davranış
Kodum aşağıdaki gibidir:
#include <stdio.h>
int main()
{
int x = 10, y = 0;
x = x++;
printf("x: %d\n", x);
y = x++;
printf("y: %d\n", y);
}
sonrası artım doğasını göz önüne alındığında, aşağıdaki çıktıyı bekler:
x: 10
y: 10
benim akıl artışı gerçekleşir sonra hat 5, x
başlangıç değerinin tayin edilmesi gerektiğidir. Bu benim için kasıtlı bir seçim gibi görünüyor,
x: 11
y: 11
montaj içine Kazı:
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
Burada neler oluyor
Bunun yerine, ancak, bu olsun? GCC beni kendimden kurtarmaya mı çalışıyor? Kullanışlı bir dil referansım yok ama bunun amaçlanan semantiği bozduğunu düşünürdüm.
iğrençlikleri olarak yazılabilir olur !!! –
http://tr.wikipedia.org/wiki/Sequence_point – Ken
Kötü eski günlerde, bazı dillerdeki a = 1 + a ', tüm yeni hataların başlayacağı bir maymundu. –