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 回答