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>
とソースコードに書く.
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
posted with amazlet at 11.05.31
Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて
posted with amazlet at 11.05.31