Moje pytanie brzmi, czy zachowanie programu jest zdefiniowane lub niezdefiniowane, jeśli jest w ogóle ważne. Jeśli jest zdefiniowany, czy wartość x jest znana w main?
Ten kod zdecydowanie nie jest czysty, ale dla mnie powinien działać w sposób przewidywalny.
int x
umieszcza zmienną w segmencie danych, który jest zdefiniowany jako zero przy uruchomieniu programu. Przed main()
wywoływane są inicjatory statyczne. Dla x
jest to kod x = x + 1
. x = 0 + 1 = 1
. W ten sposób main() zwróciłby 1.
Kod zdecydowanie zadziałałby w nieprzewidywalny sposób, jeśli x
jest zmienną lokalną, alokowaną na stosie. Stan stosu, w przeciwieństwie do segmentu danych, z pewnością zawiera nieokreślone śmieci.
Interesujące. Przynajmniej GCC daje 1, nawet z '-std = C++ 98 -pedantic'. – Philipp
Kompilowanie tego z MSVC9 (15.00.30729.01) daje 1. – akira
Punkt kolejności przychodzi na myśl http://en.wikipedia.org/wiki/Sequence_point –