Estoy usando Coverity Prevent en un proyecto para encontrar errores."x = ++ x" ¿es realmente indefinido?
Se informa de un error para esta expresión (Los nombres de las variables son, por supuesto cambiado):
x=
(a>= b) ?
++x: 0;
El mensaje es: defecto
EVALUATION_ORDER: En "
x=(a>= b) ? ++x: 0;
", "x
" es escrito en "x
" (la asignación LHS) y escrito en "(a>= b) ? ++x: 0;
", pero el orden en que se producen los efectos secundarios no está definido porque no hay punto de secuencia intermedio. FIN DEL MENSAJE
Si bien puedo entender que "x = x++
" no está definido, este es un poco más difícil para mí. ¿Es este un falso positivo o no?
El título de tu pregunta es confuso. Usted dice que entiende que 'x = x ++' no está definido. Sin embargo, el título de su pregunta parece preguntar si 'x = ++ x' está definido. ¿Eso significa que no entiendes que 'x = ++ x' no está definido? ¿O su pregunta es realmente sobre el caso con el operador '?:' Condicional? – AnT
Perdón por la confusión. Entendí que x = x ++ no está definido, pero no (tiempo pasado) entendí por qué (y si) x = ++ x no estaba definido. ¿No creí eso?: Era la principal putrefacción del problema, por lo tanto lo omití (desafortunadamente sin decir por qué). Pero para preservar la integridad del mensaje de Coverity, lo mantuve en el mensaje de Coverity. Estoy de acuerdo en que eso hizo mi pregunta un poco confusa. –
¿Esto también está indefinido para JAVA? Porque veo aquí http://www.careercup.com/question?id=13543663 y la versión más votada sugiere que dará un resultado definido. – user007