Używam Coverity Prevent do projektu, aby znaleźć błędy."x = ++ x" czy to jest naprawdę niezdefiniowane?
zgłasza błąd tej wypowiedzi (Nazwy zmiennych są oczywiście zmienione):
x=
(a>= b) ?
++x: 0;
Przesłanie brzmi: wada
EVALUATION_ORDER: W "
x=(a>= b) ? ++x: 0;
", "x
" jest napisane w "x
" (przypisanie LHS) i zapisane w "(a>= b) ? ++x: 0;
", ale kolejność, w której występują efekty uboczne, jest niezdefiniowana, ponieważ nie ma pośredniego punktu sekwencji. KONIEC ZGŁOSZENIA
Chociaż mogę zrozumieć, że "x = x++
" jest niezdefiniowany, ten jest nieco trudniejszy dla mnie. Czy to jest fałszywy pozytyw, czy nie?
Tytuł twojego pytania jest mylący. Mówisz, że rozumiesz, że 'x = x ++' jest niezdefiniowane. Jednak tytuł pytania wydaje się pytać, czy zdefiniowano "x = ++ x". Czy to oznacza, że nie rozumiesz, że 'x = ++ x' jest niezdefiniowane? A może twoje pytanie dotyczy sprawy z warunkowym operatorem '?:'? – AnT
Przepraszamy za zamieszanie. Rozumiem, że x = x ++ jest niezdefiniowane, ale nie (czas przeszły) nie rozumie, dlaczego (i jeśli) x = ++ x było niezdefiniowane. Nie wierzyłem w to?: Było głównym zgnilizną problemu, dlatego pominąłem go (niestety, nie wyjaśniając dlaczego). Aby zachować integralność komunikatu Coverity, zachowałem go w komunikacie Coverity. Zgadzam się, że to sprawiło, że moje pytanie było trochę mylące. –
Czy jest to również niezdefiniowane w przypadku JAVA? Ponieważ widzę tutaj http://www.careercup.com/question?id=13543663, a najbardziej wzniosłe ans sugeruje, że da określony wynik. – user007