Je suis nouveau chez C et je suis confronté à:
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
uint64_t foo = 10;
printf("foo is equal to %" PRIu64 "!\n", foo);
return 0;
}
Et il fonctionne! Je ne comprends pas pourquoi? Quelqu'un peut-il m'aider à ce sujet? Merci beaucoup! Torr
PRIu64
est un spécificateur de format, introduit dans C99, pour l'impression uint64_t
, où uint64_t
est (à partir de la page de référence liée):
type entier non signé d'une largeur de ... 64 bits respectivement (fourni uniquement si l'implémentation prend directement en charge le type)
PRIu64
est une chaîne (littérale), par exemple la suivante:
printf("%s\n", PRIu64);
imprime llu
sur ma machine. Les littéraux de chaîne adjacents sont concaténés, à partir de la section 6.4.5 Littéraux de chaîne de la norme C99:
Dans la phase de traduction 6, les séquences de caractères multi-octets spécifiées par n'importe quelle séquence de jetons de caractères adjacents et de chaînes larges sont concaténées en une seule séquence de caractères multi-octets . Si l'un des jetons est un jeton littéral de chaîne large, la séquence de caractères multi-octets résultante est traitée comme un littéral de chaîne large; sinon, il est traité comme un littéral de chaîne de caractères.
Ça signifie:
printf("foo is equal to %" PRIu64 "!\n", foo);
(sur ma machine) est identique à:
printf("foo is equal to %llu!\n", foo);
Voir http://ideone.com/jFvKR9 .