2013-03-07 19 views
5

ProblemWie wird ein Guint64-Wert gedruckt, wenn glib verwendet wird?

Ich mache Gebrauch von der GLib 2.0 Bibliothek und erklärte eine gunit64 Variable. Ich möchte seinen Wert auf dem Bildschirm ausgeben, aber es funktioniert nicht richtig.

-Code

Betrachten Sie den folgenden Code-Schnipsel als Beispiel. Ich deklariere eine Guint64-Variable und versuche, ihren Wert zu drucken.

guint64 myValue = 24324823479324; 
printf("My Value: %d\n", myValue); 

Warnung

ich diese Warnung:

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘guint64’ 

Ausgabe

ich eine seltsame negative Zahl auf dem Bildschirm erhalten:

Mein Wert: -1871285220

Weitere Kommentare

Ich habe versucht, die API-Dokumentation zu suchen, und ich fand das folgende unter guint64: 64

Eine ganze Zahl ohne Vorzeichen garantiert sein Bits auf allen Plattformen. Die Werte dieses Typs können von 0 bis G_MAXUINT64 (= 18,446,744,073,709,551,615) reichen.

Verwenden Sie zum Drucken oder Scannen von Werten dieses Typs G_GINT64_MODIFIER und/oder G_GUINT64_FORMAT.

Daher nehme ich an, dass ich entweder die Modifikator- oder Formatdefinitionen verwenden muss. Die Dokumentation zeigt jedoch nicht, wie sie verwendet werden. Kann mir bitte jemand helfen?

Antwort

9

Sie haben die richtige macro for this gefunden. Hier ist, wie es zu benutzen:

printf("My value: %" G_GUINT64_FORMAT "\n", myValue); 

Beachten Sie, dass das Makro ein zitierte Stringliteral ist, so dass die obige ist die richtige Syntax. Beachten Sie auch, dass die % nicht Teil des Makros ist.

Ihre Nummer erscheint negativ, da Sie %d verwenden, die ein int erwartet, und die Bits Ihre Nummer, wenn betrachtet wie ein kleiner, signiert int, kodieren etwas Negatives.

+0

Aus irgendeinem Grund nicht funktioniert. Nichts wird gedruckt – Goaler444

+2

@ Goaler444 Vielleicht wird Stdout gerade nicht wegen fehlender Zeilenschaltung gelöscht? Versuchen Sie 'printf (" Mein Wert:% "G_GUINT64_FORMAT" \ n ", meinWert);' stattdessen. – Ancurio

+0

@ Goaler444 Es wäre interessant, genau zu erfahren, wie Ihr Code aussieht, es könnte etwas albern sein (wie eine fehlende Zeilenumbruch, wie Ancurio sagt). Das sollte wirklich funktionieren, und es ist der richtige Weg, es zu tun. – unwind

Verwandte Themen