1. ホーム
  2. c

[解決済み] printfに%zu指定は必要ですか?

2022-03-09 21:12:20

質問

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

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

の代わりに 123 を取得しました。 zu .
その他の指定子は正しく動作します。

もし size_t が存在してはならない。 zu にもあります。 printf ?
これはライブラリベンダーに問い合わせるべきことなのでしょうか、それともライブラリの実装で除外してもいいのでしょうか?

解決方法は?

<ブロッククオート

size_t があるのなら、printf でも zu を使えるようにすべきではないでしょうか?

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

そのため、C99(またはC11)が使えず、印刷しなければならなかった場合 size_t をC89で使う場合は、他の既存の型にフォールバックすればいいだけです。

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