を出力するいくつかのC ++コードがありますsize_t
。
size_t a;
printf("%lu", a);
これを32ビットと64ビットの両方のアーキテクチャで警告なしにコンパイルしたいのですが。
これがC99の場合、を使用できますprintf("%z", a);
。しかし、AFAICT %z
は標準のC ++方言には存在しません。代わりに、私はしなければなりません
printf("%lu", (unsigned long) a);
これは本当に醜いです。
size_t
言語に組み込まれたs を印刷する機能がない場合、適切なキャストをsize_t
sに挿入して、適切なキャストを維持しながら、誤ったコンパイラ警告を排除できるprintfラッパーなどを作成できるかどうか疑問に思います。
何か案は?
編集私がprintfを使用している理由を明確にするために、私は整理している比較的大きなコードベースを持っています。printfラッパーを使用して、「警告を書き込み、それをファイルに記録し、場合によってはエラーでコードを終了する」などの処理を行います。coutラッパーを使用してこれを行うのに十分なC ++-fooを集めることはできるかもしれませんが、コンパイラの警告を取り除くためだけに、プログラムのすべてのwarn()呼び出しを変更したくありません。
"%l"
か?それは常に適切なサイズではありませんか?または携帯性は重要ですか?