Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

354
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!