タイプの変数がありsize_t
、それを使用してそれを印刷したいと思いprintf()
ます。可搬性のある印刷に使用するフォーマット指定子は何ですか?
32ビットマシンで%u
は正しいようです。でコンパイルしg++ -g -W -Wall -Werror -ansi -pedantic
ましたが、警告はありませんでした。しかし、そのコードを64ビットマシンでコンパイルすると、警告が表示されます。
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
警告をに変更すると、期待どおりに消え%lu
ます。
問題は、32ビットと64ビットの両方のマシンで警告が発生しないようにコードを記述するにはどうすればよいですか?
編集:回避策として、1つの答えは、変数を十分な大きさの整数に「キャスト」して、たとえばunsigned long
を使用して出力することだと思い%lu
ます。それはどちらの場合でも機能します。他にアイデアがあるかどうか探しています。
unsigned long
libc実装がz
修飾子をサポートしていない場合は、キャスト先が最良のオプションです。C99標準では推奨していますsize_t
以上の整数変換ランク大きなを持っていないlong
あなたが合理的に安全だので、