Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

363
Vistas
¿Por qué ++variable no se trata como lvalue en C?

Considere el siguiente código C:

 #include <stdio.h> int main(void) { int a = 0; printf("%d\n", ++a += 1); }

++ tiene prioridad sobre += , por lo que debe evaluarse primero. Entonces tenemos a a la izquierda y 1 a la derecha. Ahora, según tengo entendido ++a debería dar como resultado a (solo cambia su valor) que es lvalue, entonces, ¿por qué esta declaración da el siguiente error?

 lvalue required as left operand of assignment
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El operador de incremento de prefijo ++ da como resultado el valor incrementado de su operando, sin embargo, no es un valor l. Sección 6.5.3.1p2 del estándar C : describe la semántica de la siguiente manera:

El valor del operando del operador prefijo ++ se incrementa. El resultado es el nuevo valor del operando después del incremento. La expresión ++E es equivalente a (E+=1) . Consulte las discusiones sobre operadores aditivos y asignación compuesta para obtener información sobre restricciones, tipos, efectos secundarios y conversiones y los efectos de las operaciones en los punteros.

Luego, la sección 6.5.16.2p3 con respecto a los operadores de asignación compuesta establece:

Una asignación compuesta de la forma E1 op = E2 es equivalente a la expresión de asignación simple E1 = E1 op (E2) , excepto que el lvalue E1 se evalúa solo una vez, y con respecto a una llamada de función de secuencia indeterminada, la operación de un la asignación compuesta es una evaluación única.

Y 6.5.16p3 con respecto al operador de asignación establece además:

Un operador de asignación almacena un valor en el objeto designado por el operando izquierdo. Una expresión de asignación tiene el valor del operando izquierdo después de la asignación, pero no es un valor l.

Por lo tanto, explícitamente no está permitido. Incluso si lo fuera, una expresión como ++a += 1 haría que a se modificara más de una vez sin un punto de secuencia intermedio que desencadenaría un comportamiento indefinido.

Este es uno de esos lugares donde C y C++ difieren. De hecho, C++ permite que el resultado del operador = y, por extensión, la asignación compuesta y el prefijo ++ / -- , sea un valor l.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda