我是 C 的新手,我面临着:
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
uint64_t foo = 10;
printf("foo is equal to %" PRIu64 "!\n", foo);
return 0;
}
它有效!我不明白为什么?有人可以帮我解决这个问题吗?非常感谢!托
PRIu64
是 C99 中引入的用于打印的格式说明符,uint64_t
其中uint64_t
是(来自链接的参考页):
无符号整数类型,宽度分别为 ... 64 位(仅在实现直接支持该类型时提供)
PRIu64
是一个字符串(字面量),例如:
printf("%s\n", PRIu64);
llu
在我的机器上打印。相邻的字符串文字被连接起来,来自C99 标准的第6.4.5 节字符串文字:
在翻译阶段 6 中,由任何相邻字符序列和宽字符串文字标记指定的多字节字符序列连接成单个多字节字符序列。如果任何标记是宽字符串文字标记,则生成的多字节字符序列将被视为宽字符串文字;否则,它被视为字符串文字。
这表示:
printf("foo is equal to %" PRIu64 "!\n", foo);
(在我的机器上)与以下内容相同:
printf("foo is equal to %llu!\n", foo);
您还可以使用它来打印指针值。来自LTP BPF 补丁集的示例:
static uint64_t *val;
...
tst_res(TFAIL, "dst(r7) = %"PRIu64", but should be zero", *val);
印刷:dst(r7) = 18446744073709551615, but should be zero
注意:tst_res()
是一个类似 printf 的函数。