问题
我正在使用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。
因此,我假设我必须使用修饰符或格式定义。但是,文档未显示如何使用它们。请有人帮帮我吗?
答案 0 :(得分:9)
您找到了合适的macro for this。以下是如何使用它:
printf("My value: %" G_GUINT64_FORMAT "\n", myValue);
请注意,宏是带引号的字符串文字,因此上面是正确的语法。另请注意,%
不是宏的一部分。
您的号码显示为否定,因为您使用的是%d
,需要int
,并且您的号码位在被视为较小的已签名的int
时会编码为负值