Рассмотрим этот код:
typedef int64_t Blkno;
#define BLKNO_FMT "%lld"
printf(BLKNO_FMT, (Blkno)some_blkno);
Это хорошо работает на x86. На x64 int64_t на самом деле является long
, а не long long
, а в то время как long
и long long
имеют одинаковый размер на x64 компилятор выдает ошибку:
src / cpfs / bitmap.c: 14: предупреждение: формат '% lld' ожидает тип 'long long int', но аргумент 6 имеет тип 'Blkno'
printf
, что я передаю 64-битный тип? #define
, например BLKNO_FMT
как указано выше?