まず、Microsoftの実装does support<stdint.h>
。
あなたがやっていることに適したタイプを使用してください。
例えば、パディングビットなしで正確に16ビット幅の符号なしタイプが必要な場合は、<stdint.h>
で定義されたuint16_t
を使用します。
あなたは少なくとも 16ビット幅ですunsigned型が必要な場合は、uint_least16_t
、またはuint_fast16_t
、またはshort
、またはint
を使用することができます。
あなたが思うようにしばしば正確な幅のタイプを必要としません。重要なことは、タイプの正確なサイズではなく、サポートする値の範囲です。しかし、正確に表現することは、外部で定義されたデータフォーマットに接続するときに重要です。その場合は、使用する型を示す宣言が既にあるはずです。
は、予め定義されたタイプの範囲に特定の要件がある:char
は、少なくとも8ビット、short
とint
を少なくとも16ビット、long
は、少なくとも32ビットであり、long long
は、少なくとも64ビットであるです。また、short
は少なくともchar
、int
は少なくともshort
と同じ幅であり、等である。 (標準では最小範囲が指定されていますが、最小サイズは範囲とバイナリ表現が必要であるという事実から導き出すことができます。)
<stdint.h>
はCヘッダーです。 #include
をC++プログラムで使用すると、型名はグローバル名前空間に直接インポートされ、はstd
名前空間にインポートされる場合もあります。もインポートされます。 #include <cstdint>
の場合、タイプ名はstd
名前空間にインポートされ、はもグローバル名前空間にインポートされる場合とされない場合があります。 UINT32_MAX
のようなマクロ名はどの名前空間にもありません。彼らは常にグローバルです。いずれのバージョンのヘッダーも使用できます。接頭辞std::
を使用しているか使用していないか一貫してください。
'short'や' int'のようなコアタイプの正確なサイズは、プラットフォーム間で一貫しているとは限りません。そのため、 'int16_t'や' int32_t'のような型はまったく存在しません。いくつかのWindowsコンパイラには 'stdint.h'(または同等のもの)があります。 '#include'(C++)ではなく '#include '(C)を使用してください。 –
Windowsでstdint.hに依存する最も明白な方法は、もちろんGCCを使用することです。 MSVC++には、少なくとも過去3年間は同様にしていました。 –
あなたのタイプは* exact *幅を持つことが重要ですか?あるいは、 'int'が(いくつかのシステムでは)32ではなく36ビットであれば、それは単なる利点です(http://stackoverflow.com/questions/6971886/exotic-architectures-the-standards-committees-care-about)。コンパイルされていないコードよりも? –