2010-11-05 14 views

Odpowiedz

11

Nie jest niezdefiniowana.

tu odpowiedzi na C Sequence points and partial order

myślę, że samo w C++ (i tu jest moja odpowiedź, zanim zobaczyłem, że link):

Operator przecinek wprowadza punkt sekwencji (i ograniczeń w pewnym stopniu kolejność wyrażenie należy ocenić - w lewo w prawo, zanim), a więc:

  • dwie modyfikacje i są oddzielone przez punkt sekwencji (drugi przecinek).
  • modyfikacja i w i++ jest oddzielona od wszystkiego innego przez punkty sekwencji.
  • modyfikacja i przez = jest nie oddzielony od ostatniego wystąpienia i w wypowiedzi, ale to jest OK, bo mamy możliwość dostępu i i modyfikować go bez przerywania punktu sekwencji, pod warunkiem, że dostęp jest " aby określić wartość do zapamiętania "(5/4).
  • Jak mówi Als, w praktyce nie ma znaczenia, czy kod został zdefiniowany zachowanie lub nie, pod warunkiem że każdy miał podstawowe zdrowego rozsądku, by nie napisać to ;-)
+0

Biorąc pod uwagę tylko fakt, że ',' jest punktem sekwencji, tak. Niestety standard jest bardzo ostrożny: 'Zwróć uwagę, że niektóre aspekty sekwencjonowania w abstrakcyjnej maszynie są nieokreślone; powyższe ograniczenie skutków ubocznych dotyczy tej konkretnej sekwencji wykonania, w której generowany jest prawdziwy kod. " –

+0

Chciałem odpowiedzieć, ale nie zrobiłem tego. [Jeszcze jedno pytanie o niezdefiniowanym zachowaniu] ;-) –

+0

@Let_Me_Be: Przyznaję, że nie rozumiem tego przypisu. Co to znaczy "wygenerować rzeczywisty kod" w sekwencji wykonawczej "? –

0

Bo to nie jest zdefiniowane w standardzie, który z post-przyrostu lub cesji odbędzie się pierwszy; pozostawia się je do implementacji kompilatora, aby zadecydować o ich kolejności.

0

jest niezdefiniowana w C++ do przypisania wartość zwiększona do siebie:

i = i++ 

Co powinienem zrobić po tym i? Czy powinna to być poprzednia wartość, czy jedna plus poprzednia wartość? Kolejność wykonywania pozostawia się kompilatorowi, aby różne platformy miały różne wyniki.

+0

Jestem prawie pewien, że 'i' powinien pozostać niezmieniony po tym. Jest to wciąż technicznie niezdefiniowane zachowanie z powodu punktu sekwencyjnego, ale nie ma mowy, aby wynik mógł być inny. –

Powiązane problemy