web-dev-qa-db-ja.com

%zu指定子はprintfに必要ですか?

組み込みプラットフォームでC89を使用しています。 size_tを印刷しようとしましたが、うまくいきませんでした:

#include <stdio.h>
int main(void) {
    size_t n = 123;
    printf("%zu\n",n);
    return 0;
}

123の代わりに、zuを取得しました。
他の指定子が正しく機能します。

size_tが存在する場合、zuprintfで利用できませんか?
これはライブラリベンダーに連絡する必要があるものですか、それともライブラリの実装で除外できますか?

11
Trevor Hickey

Size_tが存在する場合、printfでもzuを使用できませんか?

size_tは少なくともC89から存在していましたが、それぞれのフォーマット指定子%zu(具体的には長さ修飾子z)がC99以降で標準に追加されました。

したがって、C99(またはC11)を使用できず、C89でsize_tを印刷する必要がある場合は、次のような他の既存のタイプにフォールバックする必要があります。

printf("%lu\n", (unsigned long)n);
11
P.P.