Ich verwende Coverity Prevent auf ein Projekt, um Fehler zu finden."x = ++ x" ist es wirklich undefiniert?
ein Fehler für diesen Ausdruck (Die Variablennamen sind natürlich geändert) berichtet:
x=
(a>= b) ?
++x: 0;
Die Botschaft lautet:
EVALUATION_ORDER Defekt: In "
x=(a>= b) ? ++x: 0;
", "x
" ist geschrieben in "x
" (die Zuordnung LHS) und geschrieben in "(a>= b) ? ++x: 0;
" aber die Reihenfolge, in der die Nebenwirkungen stattfinden, ist undefiniert, weil es keinen dazwischenliegenden Sequenzpunkt gibt. ENDE DER NACHRICHT
Während ich verstehen kann, dass "x = x++
" undefined ist, ist dieses ein bisschen härter für mich. Ist das ein falsch positives oder nicht?
Der Titel Ihrer Frage ist verwirrend. Sie sagen, dass Sie verstehen, dass 'x = x ++' nicht definiert ist. Der Fragetitel scheint jedoch zu fragen, ob 'x = ++ x' definiert ist. Bedeutet das, dass Sie nicht verstehen, dass 'x = ++ x' nicht definiert ist? Oder ist Ihre Frage tatsächlich über den Fall mit bedingten '?:' Operator? – AnT
Sorry für die Verwirrung. Ich habe verstanden, dass x = x ++ nicht definiert ist, aber nicht (Vergangenheitsform), warum (und wenn) x = ++ x undefiniert ist. Ich habe das nicht geglaubt?: War das Hauptproblem des Problems, deshalb habe ich es weggelassen (leider ohne zu sagen, warum). Aber um die Integrität der Coverity-Nachricht zu bewahren, habe ich sie in der Coverity-Nachricht gespeichert. Ich stimme zu, dass dies meine Frage ein wenig verwirrend gemacht hat. –
Ist dies auch für JAVA undefiniert? Weil ich hier http://www.careercup.com/question?id=13543663 sehe und der am meisten upgestimmte ans vorschlägt, dass es eine definierte Ausgabe geben wird. – user007