Je voulais demander si l'instruction suivante où printf()
a été fournie avec un type int
où elle s'attendait à ce qu'un type char
invoque UN COMPORTEMENT NON DÉFINI. Sinon, quelle est exactement la démarche à suivre pour le rendre compatible avec le type attendu. Est-ce que a
sera raccourci au type de caractère?différence dans le type d'argument attendu et argument fourni dans printf
int a = 65;
printf("%c", a);
Shorter types sont promus à plus, et non pas en face. Et où est-il défini que les littéraux de caractère sont des ints, pas des caractères? – qrdl
@qrdl: ISO C99, section 6.4.4.4 §10: "Une constante de type entier a le type int."; aussi, où ai-je dit qu'un type plus long est promu à un plus court? – Christoph
@Christoph Désolé, je me trompe sur les littéraux à caractère unique. Les littéraux à plusieurs caractères sont définis par l'implémentation (comme spécifié par C99 section 6.4.4.4), mais les littéraux à caractère unique sont en effet ints. J'ai compris votre affirmation "passer un int au lieu d'un caractère est parfaitement valide" comme "int est promu char", mais dans ce contexte, cela ne voulait pas dire ça, mon mal. Je l'écrirais différemment - "en voyant% c printf() attend int et le jette à un entier non signé, un spécifié par la section 7.19.6.1 §8 de C99" – qrdl