私は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);
http://ideone.com/jFvKR9 を参照してください。