如何在使用glib时打印guint64值?

时间:2013-03-07 13:53:44

标签: c glib

问题

我正在使用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。

因此,我假设我必须使用修饰符或格式定义。但是,文档未显示如何使用它们。请有人帮帮我吗?

1 个答案:

答案 0 :(得分:9)

您找到了合适的macro for this。以下是如何使用它:

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

请注意,宏是带引号的字符串文字,因此上面是正确的语法。另请注意,%不是宏的一部分。

您的号码显示为否定,因为您使用的是%d,需要int,并且您的号码位在被视为较小的已签名的int时会编码为负值