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

0

Tak jak w tytule

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

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.)

0

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

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++).

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