32ビット単位(つまり、一度に4バイト)のファイルにデータを格納するプログラムを作成しています。私は64ビットのWindowsシステムでコードを書きましたが、使用したコンパイラは32ビット(mingw32)です。現在のシステムでは、int a longのサイズは同じで、32ビット(4バイト)です。私は現在、(コードを変更せずに)g ++で再コンパイルすることにより、コードを他のシステムに移植しています。ただし、intまたはlongのサイズは、システムによって異なります。コードのデータ型としてintまたはlongのどちらを使用するかを決定するために、整数のサイズを決定する方法(ヘッダーファイルでマクロを使用するなど)はありますか?4つの異なるタイプのシステムでコードを再コンパイルする必要があります。システムごとに4つの異なるコピーを持つようにコードを変更すると、非常に頭痛の種になります。
4 に答える
あなたがしたいのは、のような標準タイプを使用することですint32_t
。このタイプは常に32ビットです。私は現在、システム間の互換性のために、ポータブルデータベース(berkeley db)でこれらのタイプを使用しています。
それらすべてについては、ここを参照してください。
これらの定義を取得するには、stdint.hをインクルードします。
これは、C99が提供する標準的なソリューションに共通する問題です。
<stdint.h>
ヘッダーは、特定のサイズ、最速のサイズ、および最小のサイズの整数を提供するタイプのセットを定義します。問題を正確に解決するときに非常に役立ちます。
残念ながら、前回Microsoftをチェックしたときにstdint.hにAPIが提供されていなかったため、mingw32を使用しているのは良いことです。誰かがWindowsでこれを必要とする場合は、オープンソースバージョンがあります。http ://code.google.com/p/msinttypes/を参照してください。
sizeof(int)を使用して、整数のサイズを決定できます。
特定のサイズが必要な場合は、stdint.hのint32_t(またはint64_t)を使用する必要があります
この問題に対するIMOの最善のアプローチは、、などを使用せずint
、long long
代わりにプラットフォームに依存しないタイプエイリアス(、、、など)をint8_t
使用int16_t
するint32_t
ことですint64_t
。
それらはで定義されています<stdint.h>