2013-03-07 11 views
5

ProblemJak wydrukować wartość guint64 podczas korzystania z glib?

Robię wykorzystanie 2,0 biblioteką Glib i oświadczył zmienną gunit64. Chcę wydrukować jego wartość na ekranie, ale nie działa poprawnie.

Kod

Rozważmy następujący fragment kodu jako przykład. Deklaruję zmienną guint64 i próbuję wydrukować jej wartość.

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

Warning

uzyskać to ostrzeżenie:

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

Output

dostaję dziwne negatywne numer na ekranie:

Moja Wartość: -1871285220

Dalsze Komentarze

Próbowałem szukać w dokumentacji API i znalazłem następujące pod guint64:

Liczba całkowita bez znaku gwarancją 64 bity na wszystkich platformach. Wartości tego typu mogą być w zakresie od 0 do G_MAXUINT64 (= 18,446,744,073,709,551,615). Aby uzyskać możliwość drukowania lub skanowania wartości tego typu, użyj G_GINT64_MODIFIER i/lub G_GUINT64_FORMAT.

Dlatego zakładam, że muszę użyć modyfikatora lub definicji formatu. Jednak dokumentacja nie pokazuje, jak z nich korzystać. Czy ktoś może mi pomóc proszę?

Odpowiedz

9

Znalazłeś właściwy macro for this. Oto jak z niego korzystać:

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

Należy zauważyć, że makro jest cytatem literowym, dlatego powyższa jest poprawną składnią. Zauważ też, że % nie jest częścią makra.

Twój numer pojawia się negatywna, ponieważ używasz %d, który oczekuje int i bity numeru, gdy postrzegane jako mniejsze, podpisane int kodować coś negatywnego.

+0

Nie działa z jakiegoś powodu. Nic nie jest drukowane – Goaler444

+2

@ Goaler444 Być może stdout po prostu nie jest zaczerwieniony z powodu braku nowej linii? Spróbuj 'printf (" Moja wartość:% "G_GUINT64_FORMAT" \ n ", myValue);' zamiast. – Ancurio

+0

@ Goaler444 Byłoby interesujące dowiedzieć się dokładnie, jak wygląda twój kod, może być coś głupiego (jak brakujący znak nowej linii, jak mówi Ancurio). To naprawdę powinno działać i jest właściwą drogą do tego. – unwind

Powiązane problemy