Warum funktioniert PRIu64 nicht in diesem Code?
Als pro diese Antwortich habe versucht, drucken uint64_t
aber es gibt mir eine Fehlermeldung:
Fehler: expected`) " vor "PRIu64'
Folgenden ist ein minimal-code, der zeigt, was ich zu tun versuche:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>
class X {
X() {
uint64_t foo = 0;
printf("%07" PRIu64 ": ", foo);
}
};
int main() {}
Dieser minimal-code kompiliert, aber meine eigentliche code nicht. Allerdings habe ich versucht mit den 2 Linien innerhalb X::X()
genau die gleichen in meinem eigentlichen code, und das funktioniert nicht.
Was ich suchen soll Debuggen weiter? Meine eigentliche code auch #include
N anderen Header. Könnte dass das problem verursachen? Tut Reihenfolge, einschließlich der Header eine Rolle?
Bearbeiten
PRIu64
ist wie folgt definiert auf meinem Rechner:
# if __WORDSIZE == 64
# define __PRI64_PREFIX "l"
# define __PRIPTR_PREFIX "l"
# else
# define __PRI64_PREFIX "ll"
# define __PRIPTR_PREFIX
# endif
# define PRIu64 __PRI64_PREFIX "u"
InformationsquelleAutor der Frage Thanos | 2013-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine andere Möglichkeit für dieses Problem fand ich in meinem eigenen code, wenn ein anderer header schon zieht in
<inttypes.h>
vor definieren Sie__STDC_FORMAT_MACROS
. Zum Beispiel:Utils.h (Vielleicht ursprünglich geschrieben für C, wie in unserem Fall):
MyFile.cpp:
Seit
inttypes.h
bereits durchUtil.h
der compiler nicht enthalten, es wieder, und sehen nicht, die Erklärung der__STDC_FORMAT_MACROS
.Die Lösung ist entweder zu Bearbeiten
Utils.h
zu gehören#define __STDC_FORMAT_MACROS
oder stellen Sie sicher, Sie zu definieren, bevor Sie tun, jede enthält inMyFile.cpp
.Dem original-setup tatsächlich kompiliert Prima auf GCC 4.8 auf Ubuntu, aber nicht mit einem alten ltib GCC 4.3 toolchain für die PowerPC-Architektur, die es umso mehr verwirrend auf den ersten.
InformationsquelleAutor der Antwort Collin
In C++ sind Makros nicht automatisch nur durch das einbinden der Datei.
Müssen Sie den folgenden:
bevor
Wie printf uint64_t? Schlägt fehl mit: "spurious trailing '%' in format"
InformationsquelleAutor der Antwort namaenashi
PRIu64
ist nicht definiert, wo Sie es verwenden.Ersetzen Sie es mit dem string
"llu"
und der code kompiliert (das ist aber nicht fix, es nur zeigt, dass das problem)Vielleicht die
include
fehlt. Vielleicht über zealos zählen Wachen, und es wird ohne die Magische token block derdefine
. Vielleicht hat dein pch ist kaputt.InformationsquelleAutor der Antwort Yakk - Adam Nevraumont