С C99 модификатор длины %j
также может использоваться с семейством функций printf для типов int64_t
и uint64_t
:
#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
int64_t a = 1LL << 63;
uint64_t b = 1ULL << 63;
printf("a=%jd (0x%jx)\n", a, a);
printf("b=%ju (0x%jx)\n", b, b);
return 0;
}
. Компиляция этого кода с помощью gcc -Wall -pedantic -std=c99
не выдает предупреждений, а программа печатает ожидаемый результат:
a=-9223372036854775808 (0x8000000000000000)
b=9223372036854775808 (0x8000000000000000)
Это соответствует printf(3)
в моей системе Linux (на странице руководства указано, что j
используется для указания преобразования к intmax_t
или uintmax_t
, в моем stdint.h оба int64_t
и intmax_t
точно подобраны, и аналогично для uint64_t
). Я не уверен, что это совершенно портативно для других систем.