printfの移植性を高める
#Fleeting_Notes
printfの移植性を高める(improve printf portability)
stdint.hの(u)int8_t、(u)int16_t、(u)int32_t、(u)int64_tを使ったコードを書く場合、printfの書式指定子(%dや%luなど)が変化するためinttypes.hを使うと良さそう
size_t、ssize_tなどの32ビットデータモデル、64ビットデータモデル等で型が変化する問題
C99から導入された長さ修飾子%zを使用するとコンパイル時や静的解析時にwarningが出なくなる
PVS-Studioの記事ではMemsize-type(メモリサイズ型)と定義している
code:memo.c
#include <stdio.h>
int main() {
size_t x = 123;
// size_t, ssize_tの場合は%zを使用する
printf("size_t: %zu", x)
}
確認用
Q. printfの移植性を高めるには
Q. uint32_t、int32_tなどの型でprintfをいい感じにするには
Q. size_t, ssize_tで警告を出さない、移植性を高くするには
参考
Memsize-type
メモ
Making Code 64-Bit Clean
調査用
Google.icon printfの移植性を高める(日)
Google.icon Improve printf portability(英)