1. ホーム
  2. c

[解決済み] うーん、PRIu64さんって誰だろう?

2022-02-15 06:45:56

質問

C言語を初めて使うのですが、こんなことに直面しています。

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

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

    return 0;
}

そして、うまくいくのです なぜなんでしょう?誰かこのことについて助けてくれませんか? どうもありがとうございました。 torr

解決方法は?

PRIu64 は、C99で導入された、印刷用のフォーマット指定子です。 uint64_t ここで uint64_t は(リンク先の参照ページより)。

幅が...の符号なし整数型 それぞれ64ビット (実装がその型を直接サポートしている場合のみ提供されます。)

PRIu64 は文字列(リテラル)であり、例えば次のようになります。

printf("%s\n", PRIu64);

印刷物 llu 私のマシンでは 隣接する文字列リテラルは連結され、セクション 6.4.5 文字列リテラル C99規格の

翻訳フェーズ6では 隣接する文字列およびワイド文字列リテラルのトークンのシーケンスによって指定されたマルチバイト文字シーケンスは、1つのマルチバイト文字シーケンスに連結されます。 . トークンのいずれかがワイド文字列リテラルトークンである場合、結果として得られるマルチバイト文字列はワイド文字列リテラルとして扱われ、そうでない場合は文字列リテラルとして扱われます。

ということになります。

printf("foo is equal to %" PRIu64 "!\n", foo);

(私のマシンでは)は同じです。

printf("foo is equal to %llu!\n", foo);

参照 http://ideone.com/jFvKR9 .