Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

355
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda