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

C 使用glib时如何打印guint64值?,c,glib,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 ty

问题

我正在使用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_maxiunt64(= 18446744073709551615)

要打印或扫描此类型的值,请使用G_GINT64_修饰符和/或 G_GUINT64_格式

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

你已经找到合适的方法了。以下是如何使用它:

printf("My value: %" G_GUINT64_FORMAT "\n", myValue);
请注意,宏是一个带引号的字符串文字,因此以上是正确的语法。还要注意,
%
不是宏的一部分


您的数字显示为负数,因为您使用的是
%d
,它需要
int
,当您的数字位被视为较小的有符号
int
,则编码为负数。

@Goaler444可能是因为缺少换行符,所以stdout没有被刷新?尝试
printf(“我的值:%”G\u GUINT64\u格式“\n”,我的值)取而代之。@Goaler444确切地了解代码的外观将是一件有趣的事情,可能有一些愚蠢的事情(如Ancurio所说的缺少换行符)。这确实应该有效,而且是正确的方法。@Ancurio,我认为这是一个冲洗问题。我添加了“\n”,它就可以工作了。@谢谢你,现在就可以了。对不起,我没有给你正确的答案。一开始对我不起作用。我的错。