Mat*_*ner 5 c printf gcc typedef stdint
考虑以下代码:
typedef int64_t Blkno;
#define BLKNO_FMT "%lld"
printf(BLKNO_FMT, (Blkno)some_blkno);
Run Code Online (Sandbox Code Playgroud)
这在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上面那样使用?jfs*_*jfs 10
使用PRId64从inttypes.h.
Blkno不是一个非常好的类型名称.BLKNO_FMT可以替换为PRIdBLKNO.
#include <inttypes.h>
#include <stdio.h>
typedef int64_t Blkno;
#define PRIdBLKNO PRId64
int main(void) {
printf("%" PRIdBLKNO "\n", (Blkno)1234567890);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2772 次 |
| 最近记录: |