1. ホーム
  2. c

[解決済み] プラットフォーム非依存の size_t c のフォーマット指定子?

2023-01-09 22:52:05

質問

型の変数を出力したい。 size_t をC言語で表示したいのですが、どうやら size_t は、アーキテクチャによって異なる変数型にエイリアスされているようです。たとえば、あるマシン (64 ビット) では、次のコードは何の警告も出しません。

size_t size = 1;
printf("the size is %ld", size);

を実行しましたが、私の別のマシン(32ビット)では、上記のコードは次の警告メッセージを生成します。

警告: フォーマット '%ld' は、タイプ しかし、引数 3 はタイプ 'size_t *' です。

これはポインタのサイズの違いによるものと思われ、私の64ビットマシンでは size_t がエイリアスになり long int ( "%ld" ) であるのに対し、私の32ビットマシンでは size_t は別の型にエイリアスされています。

のための特別な書式指定子はありますか? size_t ?

どのように解決するのですか?

はい。 z 長さ修飾子を使う。

size_t size = sizeof(char);
printf("the size is %zu\n", size);  // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size);  // hex size_t

他に利用できる長さ修飾子は hh (です。 char ), hshort ), llong ), lllong long ), jintmax_t ), tptrdiff_t )、そして Llong double ). C99標準の§7.19.6.1 (7)を参照してください。