32bit/64bit両対応のコードを書いていると,よく printf() で引っかかります."%d"のような"書式"がややこしいからです.
というわけで,変数の"型"と"書式"の対応を,表で整理してみました.
| 型 | 書式 | 注意事項 |
| ssize_t | %zd | |
| size_t | %zu | |
| intmax_t | %jd | |
| uintmax_t | %ju | |
| ptrdiff_t | %t | |
| signed char | %hhd | |
| unsigned char | %hhu | |
| short int | %hd | |
| unsigned short int | %hu | |
| int | %d | |
| unsigned int | %u | |
| long int | %ld | |
| unsigned long int | %lu | |
| long long int | %lld | |
| unsigned long long int | %llu | |
| int32_t | %PRId32 | 以下,#include |
| uint32_t | %PRIu32 | |
| int64_t | %PRId64 | |
| uint64_t | %PRIu64 |
補足1: 16進数等の表示
- 16進表示の場合は 上表の"u" を "x" に置き換える.例)"%lu" → "%lx"
- 8進数表示の場合は 上表の"u" を "o" に置き換える.例) "%lu" → "%lo"
補足2: inttypes.hの使い方
#define __STDC_FORMAT_MACROS #include <inttypes.h>
または
#include <cinttypes>
とソースコードに書く.