Рассмотрим этот код:
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
, как указано выше?