J'ai écrit un code de test très simple de printf uint64_t:
#include <inttypes.h>
#include <stdio.h>
int main()
{
uint64_t ui64 = 90;
printf("test uint64_t : %" PRIu64 "\n", ui64);
return 0;
}
J'utilise Ubuntu 11.10 (64 bits) et la version 4.6.1 de gcc pour le compiler, mais j'ai échoué:
main.cpp: In function ‘int main()’:
main.cpp:9:30: error: expected ‘)’ before ‘PRIu64’
main.cpp:9:47: warning: spurious trailing ‘%’ in format [-Wformat]
La norme ISO C99 spécifie que ces macros ne doivent être définies que si elles sont explicitement demandées.
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
... now PRIu64 will work
Lors de la compilation de memcached sous Centos 5.x, j’ai eu le même problème.
La solution consiste à mettre à niveau gcc et g ++ vers la version 4.4 au moins.
Assurez-vous que votre CC/CXX est défini (exporté) sur les fichiers binaires corrects avant la compilation.
Puisque vous avez inclus la balise C++, vous pouvez utiliser la bibliothèque {fmt} et éviter la macro PRIu64
et d’autres problèmes printf
:
#include <fmt/core.h>
int main() {
uint64_t ui64 = 90;
fmt::print("test uint64_t : {}\n", ui64);
}
La facilité de formatage basée sur cette bibliothèque est proposée pour normalisation en C++ 20: P0645 .
Disclaimer: je suis l'auteur de {fmt}.