Inkrementacja - kolejność aktualizacji zmiennych

0

Cześć,
w książce "Język ANSI C" Kernighana i Ritchiego autorzy przestrzegają przed używaniem następującej konstrukcji:

a[i]=i++ 

tłumacząc to tym, iż nie jest określona kolejność aktualizacji zmiennych w powyższym wyrażeniu (zatem nie wiadomo, czy indeks i będzie starą, czy nową wartością i).
Jednocześnie, o ile rozumiem używanie następującej instrukcji:

a[i]=j++<code>

zawsze spowoduje, iż do a[i] przypisana zostanie stara wartość j. 

Czy ostrzeżenie autorów należy rozumieć w ten sposób, że jeżeli w danej instrukcji występuje operator inkrementacji (ogólniej - jakikolwiek operator powodujący efekt uboczny) działający na zmiennej i, to ta właśnie zmienna i nie powinna występować w tejże instrukcji po raz drugi, ze względu na to, że kolejność aktualizacji zmiennych nie jest określona?

Pozdrawiam.
0

Z punktu widzenia komputera nie ma znaczenia czy najpierw wykona operacje i++ czy najpierw zapamięta sobie adres a[i]. A to oznacza że w zależności od widzimisie kompilatora działanie programu może być różne.

0

Tak, tutaj masz trochę informacji kiedy kolejność aktualizacji tej samej wartości wielokrotnie w wyrażeniu może być zdefiniowana.: http://en.wikipedia.org/wiki/Sequence_point .

1 użytkowników online, w tym zalogowanych: 0, gości: 1