Ejecución de printf con operadores ++ en C

Considere la siguiente declaración en C y prediga su salida.

printf("%d %d %d", i, ++i, i++);

Esta declaración invoca un comportamiento indefinido al hacer referencia tanto a ‘i’ como a ‘i++’ en la lista de argumentos. No se define en qué orden se evalúan los argumentos. Diferentes compiladores pueden elegir diferentes órdenes. Un solo compilador también puede elegir diferentes órdenes en diferentes momentos.

Por ejemplo, las siguientes tres declaraciones printf() también pueden causar un comportamiento indefinido:

C

// C Program to demonstrate the three printf() statements
// that cause undefined behavior
#include <stdio.h>
  
// Driver Code
int main()
{
    volatile int a = 10;
    printf("%d %d\n", a, a++);
  
    a = 10;
    printf("%d %d\n", a++, a);
  
    a = 10;
    printf("%d %d %d\n", a, a++, ++a);
    return 0;
}
Producción

11 10
10 10
12 11 11

Explicación: por lo general, los compiladores leen los parámetros de printf() de derecha a izquierda . Entonces, ‘a++’ se ejecutará primero, ya que es el último parámetro de la primera instrucción printf(). Imprimirá 10. Aunque, ahora el valor se ha incrementado en 1, por lo que el penúltimo argumento, es decir, imprimirá 11. De manera similar, las otras declaraciones también se ejecutarán.

Nota: En pre-incremento , es decir, ++a , aumentará el valor en 1 antes de imprimir, y en post-incremento , es decir, a++ , imprime el valor al principio, y luego el valor se incrementa en 1.

Por lo tanto, no se recomienda no hacer dos o más de dos operadores de incremento previo o posterior en la misma declaración. Esto significa que no hay absolutamente ningún orden temporal en este proceso. Los argumentos se pueden evaluar en cualquier orden y el proceso de su evaluación se puede entrelazar de cualquier forma.

Este artículo es una contribución de Spoorthi Aman . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *