wake-up-neo.com

Wie kann man uint64_t drucken? Schlägt fehl mit: "falsch hinterlegtes"% "im Format"

Ich habe einen sehr einfachen Testcode für printf uint64_t geschrieben:

#include <inttypes.h>
#include <stdio.h>

int main()
{
  uint64_t ui64 = 90;
  printf("test uint64_t : %" PRIu64 "\n", ui64);
  return 0;
}

Ich benutze Ubuntu 11.10 (64 Bit) und gcc Version 4.6.1, um es zu kompilieren, aber es ist fehlgeschlagen:

main.cpp: In function ‘int main()’:
main.cpp:9:30: error: expected ‘)’ before ‘PRIu64’
main.cpp:9:47: warning: spurious trailing ‘%’ in format [-Wformat]
130
Dan

Die Norm ISO C99 legt fest, dass diese Makros nur definiert werden müssen, wenn sie explizit angefordert werden.

#define __STDC_FORMAT_MACROS
#include <inttypes.h>

... now PRIu64 will work
159
Will

Beim Kompilieren von Memcached unter Centos 5.x hatte ich das gleiche Problem.

Die Lösung besteht darin, mindestens gcc und g ++ auf Version 4.4 zu aktualisieren.

Stellen Sie sicher, dass Ihr CC/CXX vor dem Kompilieren auf rechte Binärdateien gesetzt (exportiert) wird.

4
Anders Eliasson

Da Sie das C++ - Tag eingefügt haben, können Sie die {fmt} -Bibliothek verwenden und das PRIu64-Makro und andere printf-Probleme insgesamt vermeiden:

#include <fmt/core.h>

int main() {
  uint64_t ui64 = 90;
  fmt::print("test uint64_t : {}\n", ui64);
}

Die auf dieser Bibliothek basierende Formatierungsfunktion wird in C++ 20 zur Standardisierung vorgeschlagen: P0645 .

Disclaimer: Ich bin der Autor von {fmt}.

0
vitaut