次のコードを検討してください。
typedef int64_t Blkno;
#define BLKNO_FMT "%lld"
printf(BLKNO_FMT, (Blkno)some_blkno);
これは x86 で問題なく動作します。x64 では、int64_t は実際にはlong
ではなく であり、long long
x64ではlong
とlong long
が同じサイズである場合、コンパイラはエラーを生成します。
src/cpfs/bitmap.c:14: 警告: フォーマット '%lld' はタイプ 'long long int' を想定していますが、引数 6 のタイプは 'Blkno' です</p>
printf
64 ビット型を渡していることをどのように確認できますか?#define
上記のようなものを使用するよりも、ユーザータイプの仕様を標準化するためのより良い方法はありBLKNO_FMT
ますか?