for(i=1;i<9;) a[i]=i++; w ANSI C to ub?

for(i=1;i<9;) a[i]=i++; w ANSI C to ub?
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Tak jak w tytule

szybko please a[i]=i++; w petli to ub czy nie?


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
1

Jest, nie ma nigdzie sequence pointa, a nie można w ten sposób się odnosić do modyfikowanej wartośći.

(Wołam @Endrju do weryfikacji i ładniejszego opisania.)

edytowany 2x, ostatnio: msm
KA
Dziękuję ;* !
KA
w takim razie for(;i&lt;5;) a[i++]=i; też UB ?
AN
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:78
0

czy zatem : a[i++] = i to tez UB ?

KA
sesja sesja sesja....
KA
współczuje wam
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
6

Zarówno a[i]=i++ jak i a[i++] = i to undefined behavior (W C i C++).

value computation ("obliczenie wartości") wyrażenia i (czy to jako samo i czy w a[i]) oraz side effects ("efekty uboczne") wyrażenia i++ (czy to samo i++czy w a[i++]) są unsequenced. To oznacza, że nie wiadomo co stanie się najpierw - obliczanie wartości czy efekty uboczne. Jeżeli nie wiadomo co się stanie i dotyczy to jednego obiektu to mamy do czynienia z zachowaniem niezdefiniowanym.

Sprawa komplikuje się w przypadku typów zdefiniowanych przez użytkownika i przeciążonych operatorów (ale to tylko dla C++).


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.