Dev - C++ - por que el compilador no manda error al realizar una asignacion dentro del IF

 
Vista:
Imágen de perfil de felipe
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

por que el compilador no manda error al realizar una asignacion dentro del IF

Publicado por felipe (74 intervenciones) el 05/12/2020 04:48:54
a veces por error se coloca solo un signo igual y no doble igual, y luego es dificil detectar donde esta el error, eso es molesto..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

por que el compilador no manda error al realizar una asignacion dentro del IF

Publicado por Alfil (1444 intervenciones) el 05/12/2020 08:17:41
C++ es así, no manda error porque entiende que estas realizando una asignación

1
if  (x = y)	// si a x se le asigna y

en lugar de una operación booleana

1
if  (x == y)	// si x es igual a y
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

por que el compilador no manda error al realizar una asignacion dentro del IF

Publicado por Tom (65 intervenciones) el 05/12/2020 09:44:04
No se trata de un error del compilador, sino tuyo. Lo que te resulta molesto, es perfectamente válido.

1
2
3
if((z = get_current_z()) == MAX_Z) {
  TRACE("invalid ", z);
}

o

1
2
3
4
5
6
7
{
  bool isRed;
 
 if(isRed = getObjectIsRed()) {
    TRACE("object is RED");
  }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

por que el compilador no manda error al realizar una asignacion dentro del IF

Publicado por Pedro (4 intervenciones) el 05/12/2020 17:40:28
Creo que hay 2 cosas de compilador/lenguaje que se aplican aqui:

- El if requiere entre los parentesis una expresion matematica. Cualquier cosa que pueda hacerse una comparacion contra 0.
Si la expresion resulta distinta de 0 se ejecutaran las instrucciones. Si resulta 0, no se ejecuta.

- Las asignaciones retornan el valor que asignan. Por eso puedes hacer: x = y = z, equivalente a x = (y = z).
Al usar una asignacion en un if, estas usando el valor que retorna la asignacion, que es justo el valor asignado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar