Printf с целыми числами typedef, особенно с 64-битными

Рассмотрим этот код:

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'

  1. Как я могу скажите printf , что я передаю 64-битный тип?
  2. Есть ли лучший способ стандартизировать спецификации для типов пользователей, чем использовать #define , например BLKNO_FMT как указано выше?
5
задан Matt Joiner 10 December 2010 в 09:40
поделиться