私はプログラムによって使用されたメモリの量を印刷するいくつかのコードを持っています。行は次のようになります。sizeof 32 for 64プラットフォームのprintf:プラットフォームに依存しないフォーマットコードを処理するにはどうすればよいですか?
printf("The about of RAM used is %u", anIntVariable*sizeof(double));
ここで、anIntVariableは、double配列の要素数のint変数です。とにかく、32ビットシステムでは何の問題もありませんでしたが、64ビットシステムでは、符号なしのlong整数に "%u"を使用することに関するコンパイラの警告が出ます。フォーマットコードとして "%lu"を使用すると、64ビットで問題が修正されますが、タイプが符号なしintに戻っているため、コンパイラは32ビットでエラーを発生させます。私は、実際にはsizeof(double)が32対64ビットシステムで異なる値を返すことに気付きました。私はにいくつかのウェブページのガイドを見つけました 32ビットから64ビットにコードを変換しますが、私はむしろ前後に変換する代わりに両方で動作するコードを持っています。
この行をプラットフォームに依存しない方法で書くにはどうすればよいですか?私はプリプロセッサディレクティブを使用してそれを行うことができる多くの方法を知っていますが、それはハックのようです。確かに私が実現していないエレガントな方法があります。
良い質問。 – strager
本当にいい質問です。 http://バイトを見てください。com/topic/c/answers/506972-64-bit-portability-size_t-printf-format-strings – adatapost
参照:http://stackoverflow.com/questions/1401526/use-printf-to-display-offt-nlinkt- sizet-and-others –