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オプション)の指定が必要。