Mmh, qui êtes-vous PRIu64?

Je suis nouveau à C et je suis confronté à:

#include  #include  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 en C99, pour imprimer uint64_t , où uint64_t est (depuis la page de référence liée):

type entier non signé avec une largeur de … 64 bits respectivement (à condition que l’implémentation prenne directement en charge le type)

PRIu64 est une chaîne (littérale), par exemple:

 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 Chaînes littérales du standard C99:

Dans la phase de traduction 6, les séquences de caractères multi-octets spécifiées par toute séquence de jetons littéraux de caractères adjacents et de chaînes étendues 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ère 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 la même que:

 printf("foo is equal to %llu!\n", foo); 

Voir http://ideone.com/jFvKR9 .