Spécificateur de Format unsigned char

Dire que je veux imprimer unsigned char:

unsigned char x = 12;

ce qui est correct. Ce:

printf("%d",x);

ou ceci:

printf("%u",x);

?

Le truc, c'est d'ailleurs sur j'ai DONC rencontré ce genre de discussion:

-Même avec ch changé de unsigned char, le comportement du code n'est pas défini par la norme. C'est parce que la unsigned char est promu à un int (normal des implémentations C), de sorte que l'int est passé à printf pour le spécificateur %u. Toutefois, %u s'attend à un unsigned int, de sorte que les types ne correspondent pas, et le C standard ne définit pas le comportement

-Votre commentaire est incorrect. Le C11 norme indique que les indicateurs de conversion doit être du même type que l'argument de fonction elle-même, pas le promu type. Ce point est également soulevé dans la description de l'hh modificateur de longueur: "l'argumentation ont été promus en fonction de l'entier des promotions, mais sa valeur doit être convertie en signed char ou unsigned char avant impression"

Alors, qui est-elle correcte? Aucune source fiable dire sur cette question? (Dans ce sens, nous devrions également imprimer unsigned short int avec %d, car il peut être promu à int?).

OriginalL'auteur | 2014-12-18