Que se passe-t-il lorsque j’utilise un spécificateur de format incorrect?

Je me demande simplement ce qui se passe lorsque j’utilise le mauvais spécificateur de format en C?

Par exemple:

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); 

que se passe-t-il lorsque j’utilise un spécificateur de format incorrect en C?

De manière générale, comportement indéfini. *

Cependant, rappelez-vous que printf est une fonction variadique et que les arguments des fonctions variadiques sont soumis aux promotions d’arguments par défaut . Ainsi, par exemple, un caractère est promu en tant que int . Donc, dans la pratique, ils donneront les mêmes résultats:

 char x = 'A'; printf("%c\n", x); int y = 'A'; printf("%c\n", y); 

alors que ceci est un comportement indéfini:

 long z = 'A'; printf("%c\n", z); 

* Voir par exemple la section 7.19.6.1 p9 de la norme C99:

Si l’un des arguments n’est pas du type correct pour la spécification de conversion correspondante, le comportement est indéfini.

Puisque x est A, la première impression f affichera: ‘A’.

La seconde affichera la valeur ascii de A (recherchez-la).

Le 3ème imprimera le caractère ascii pour 65 ans (je pense que c’est un A ou un, mais c’est une lettre).

Le quasortingème en imprimera 65.

Le 5ème imprimera 128.