yohhoyの日記

技術的メモをしていきたい日記

printfとsize_t型

C99にてsize_t型用の書式化文字列 長さ修飾子(length modifier)zが追加された。

#include <stdio.h>
printf("%zu\n", sizeof(int));

なお、同時にptrdiff_t型用の長さ修飾子tも追加されている。

gcc

gcc(glibc 2.1以降)はz対応している。ただし、厳密なC90(-pedanticオプション指定)としてコンパイルした場合は下記警告が出力される*1

warning: ISO C90 does not support the 'z' gnu_printf length modifier

VisualC++系

MSVC10現在でもzに対応しない。ただしVisual Studio .NET 2003(MSVC7.1)以降は、独自拡張としてI(大文字i)が用意されている。
2020-08-17追記:VisualStudio 2013以降でzをサポート。https://stackoverflow.com/questions/15610053/ 参照。

#include <stdio.h>
printf("%Iu\n", sizeof(int));  /* MSVC7.1以降で有効 */

関連URL

*1:-Wformatオプション(または-Wallオプション)の指定が必要。