73

我是 C 的新手,我面临着:

#include <stdio.h>
#include <inttypes.h>

int main(void)
{
    uint64_t foo = 10;
    printf("foo is equal to %" PRIu64 "!\n", foo);

    return 0;
}

它有效!我不明白为什么?有人可以帮我解决这个问题吗?非常感谢!托

4

2 回答 2

90

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);

请参阅http://ideone.com/jFvKR9

于 2013-05-31T14:21:41.343 回答
0

您还可以使用它来打印指针值。来自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 的函数。

于 2021-04-27T09:26:02.783 回答