Ответ 1
PRIu64
является спецификатором формата, представленным на C99, для печати uint64_t
, где uint64_t
есть (со страницы ссылки):
беззнаковый целочисленный тип с шириной... 64 бит соответственно (если только реализация напрямую поддерживает тип)
PRIu64
- строка (литерал), например:
printf("%s\n", PRIu64);
печатает llu
на моей машине. Смежные строковые литералы объединяются, из раздела 6.4.5 Строковые литералы стандарта C99:
В фазе перевода 6, многобайтовые последовательности символов, заданные любой последовательностью символов смежного символа и широкоформатных литералов, объединены в одну многобайтовую последовательность символов. Если какой-либо из токенов - это широкоформатные строковые литералы, результирующая многобайтовая последовательность символов рассматривается как широкий строковый литерал; в противном случае он рассматривается как литерал строковой буквы.
Это означает:
printf("foo is equal to %" PRIu64 "!\n", foo);
(на моей машине) совпадает с:
printf("foo is equal to %llu!\n", foo);