Salida de múltiples post y pre incrementos en una declaración [duplicate]

2 minutos de lectura

avatar de usuario
brite roy

Soy nuevo en el lenguaje C, así que sum1 ayúdame. Código AC escrito

int i=3;
printf("%d",++i + ++i);

Complier da O/P =9. ¿Cómo?

  • ¿Por qué crees que no da ese resultado?

    – KevinDTimm

    28 de septiembre de 2010 a las 12:54

avatar de usuario
nos

Los resultados son indefinidos. Está modificando una variable más de una vez en una expresión (o punto de secuencia para ser más exactos).

La modificación de una variable más de una vez entre puntos de secuencia no está definida, así que no lo haga.

Podría ser su compilador, para este caso particular decide evaluar
++i + ++i como

  • incrementar el ultimo ++i dando 4, dejando i igual a 4
  • incrementar el primero ++idando 5, dejando i en 5 (ya que el paso anterior dejó i en 4, incrementándolo a 5)
  • suma los dos valores, 4 + 5.

Otro compilador, o si altera el nivel de optimización, o si cambia ligeramente el código, podría producir una salida diferente.

  • de acuerdo: revisé mi gcc 4.1.2 y recibí el valor 10 (que podría explicarse tan fácilmente como su 9)

    – KevinDTimm

    28 de septiembre de 2010 a las 13:28

  • @KevinDTimm, ¿podría explicar cómo contabilizaría 10?

    – ajay

    25 de marzo de 2014 a las 19:49

  • @ajay: sí, el estándar dice que esto da como resultado un comportamiento indefinido. Entonces, cualquier resultado es igualmente (in)válido.

    – KevinDTimm

    25/03/2014 a las 19:59


  • @KevinDTimm Sí, es un comportamiento indefinido y puede pasar cualquier cosa porque el estándar no impone ningún requisito sobre la implementación. solo me preguntaba sobre which could be just as easily explained as your 9 parte de tu comentario.

    – ajay

    25/03/2014 a las 20:07

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad