考虑这段代码:
typedef int64_t Blkno;
#define BLKNO_FMT "%lld"
printf(BLKNO_FMT, (Blkno)some_blkno);
这在 x86 上运行良好。在 x64 上, int64_t 实际上是 a long
,而不是 a long long
,并且虽然long
和long long
在 x64 上大小相同,但编译器会生成错误:
src/cpfs/bitmap.c:14:警告:格式“%lld”需要类型“long long int”,但参数 6 的类型为“Blkno”</p>
- 我怎么知道
printf
我正在传递 64 位类型? #define
有没有比使用上述方法更好的方法来标准化用户类型的规范BLKNO_FMT
?