Como dice el título, es¿`y = x = x + 1;` comportamiento indefinido?
y = x = x + 1;
comportamiento indefinido en C?
Como dice el título, es¿`y = x = x + 1;` comportamiento indefinido?
y = x = x + 1;
comportamiento indefinido en C?
respuesta a su pregunta
Nº
¿Qué pasará
Esto sucederá:
int x = 1; /* ASSUME THIS IS SO */
y = x = x + 1;
/* Results: */
y == 2;
x == 2;
Cómo se compila
El mismo que:
x += 1;
y = x;
¿Por qué esto no está definido
Debido a que usted no está escribiendo x
en la misma expresión que lo lea. Simplemente configúrelo a sí mismo + 1
, luego asigne y
al valor de x
.
Su futuro
Si encuentra que el código confuso puede utilizar paréntesis para facilitar la lectura:
y = x = (x + 1);
No. Sólo modificar x
una vez, y debido a la asociatividad por la derecha del =
que sucede asignación antes de la asignación a y
. Incluso si sucedió después, todavía hay una sola modificación de x
. Su estado de cuenta es tan legal como y = ++x
.
No, su expresión está definida correctamente. Probablemente estaba buscando y = x = x++;
, que no lo es.
No 'y = x = x ++;' sería igual a 'y = x = x; x + = 1; '? ¿Por qué no se definiría eso correctamente? – rzetterberg
O sería equivalente a 'y = x = x + 1; x + = 1; ', o a' y = x + 1 = x; x + = 1; '? –
Estaba preguntando porque no estaba seguro y quería saber por qué 'x + 1' estaba bien, pero' x ++ 'no. – rzetterberg
Solo para su información, muntoo, ya que el "valor de retorno" de la asignación es su propio valor, también puede usarlo para otras cosas, como 'if (1 == x = 1)', que es bastante común error y la razón, los desarrolladores prefieren escribir '1 == x' en lugar de' x == 1' (porque no se puede asignar x a 1). – anroesti
Los únicos desarrolladores que conozco que escriben cosas como '1 == x' son unos con los que no trabajaría ... –
@andre: No, los" desarrolladores "no prefieren escribir eso. Es asqueroso, sucio e inútil; solo únete a la última década y activa las advertencias del compilador. – GManNickG