7

問題

私は GLib 2.0 ライブラリを利用しており、gunit64 変数を宣言しています。その値を画面に出力したいのですが、正しく機能しません。

コード

例として、次のコード スニペットを検討してください。guint64 変数を宣言し、その値を出力しようとしました。

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

警告

次の警告が表示されます。

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

出力

画面に奇妙な負の数が表示されます。

私の値: -1871285220

その他のコメント

API のドキュメントを検索しようとしたところ、guint64 の下に次のものが見つかりました。

すべてのプラットフォームで 64 ビットであることが保証されている符号なし整数。この型の値の範囲は 0 ~ G_MAXUINT64 (= 18,446,744,073,709,551,615) です。

このタイプの値を印刷またはスキャンするには、G_GINT64_MODIFIER および/または G_GUINT64_FORMAT を使用します。

したがって、修飾子またはフォーマット定義のいずれかを使用する必要があると思います。ただし、ドキュメントにはそれらの使用方法が示されていません。誰でも私を助けてもらえますか?

4

1 に答える 1

12

これに適したマクロが見つかりました。使用方法は次のとおりです。

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

マクロは引用符で囲まれた文字列リテラルであるため、上記が適切な構文であることに注意してください。%はマクロの一部ではないことにも注意してください。

%dを使用しているため、数値は負intのように見えますint.

于 2013-03-07T13:56:23.470 に答える