タイプの変数があり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 longlibc実装がz修飾子をサポートしていない場合は、キャスト先が最良のオプションです。C99標準では推奨していますsize_t以上の整数変換ランク大きなを持っていないlongあなたが合理的に安全だので、