¿Qué sucede cuando uso el especificador de formato incorrecto?
¿Me pregunto qué sucede cuando uso el especificador de formato incorrecto en C?
Por ejemplo:
x = 'A';
printf("%c\n", x);
printf("%d\n", x);
x = 65;
printf("%c\n", x);
printf("%d\n", x);
x = 128;
printf("%d\n", x);
Aceptado
¿Qué sucede cuando uso el especificador de formato incorrecto en C?
En términos generales, comportamiento indefinido. *
Sin embargo, recuerde que printf
es una función variada y que los argumentos de las funciones variadas se someten a las promociones de argumentos predeterminadas . Entonces, por ejemplo, a char
se promueve a int
. Entonces, en la práctica, ambos darán los mismos resultados:
char x = 'A';
printf("%c\n", x);
int y = 'A';
printf("%c\n", y);
mientras que este es un comportamiento indefinido:
long z = 'A';
printf("%c\n", z);
* Ver por ejemplo la sección 7.19.6.1 p9 del estándar C99:
Si algún argumento no es del tipo correcto para la especificación de conversión correspondiente, el comportamiento no está definido.