2016-11-02 4 views
1

LinuxでC++をプログラミングするときはどのようなタイプを使用しますか? int16_tuint8_tなど、stdint.hのタイプを使用することをお勧めしますか?<stdint.h>または標準タイプ?

一方、確かにstdint.hは、Windowsでのプログラミングには使用できません。しかし他方では、例えばshortは目の最初のバッチではっきりしていません。さらにcharの代わりにint8_tと書くのはもっと直感的です...

C++標準の保証は、今後標準タイプのサイズは変更されませんか?

+1

'short'や' int'のようなコアタイプの正確なサイズは、プラットフォーム間で一貫しているとは限りません。そのため、 'int16_t'や' int32_t'のような型はまったく存在しません。いくつかのWindowsコンパイラには 'stdint.h'(または同等のもの)があります。 '#include '(C++)ではなく '#include '(C)を使用してください。 –

+0

Windowsでstdint.hに依存する最も明白な方法は、もちろんGCCを使用することです。 MSVC++には、少なくとも過去3年間は同様にしていました。 –

+0

あなたのタイプは* exact *幅を持つことが重要ですか?あるいは、 'int'が(いくつかのシステムでは)32ではなく36ビットであれば、それは単なる利点です(http://stackoverflow.com/questions/6971886/exotic-architectures-the-standards-committees-care-about)。コンパイルされていないコードよりも? –

答えて

3

まず、Microsoftの実装does support<stdint.h>

あなたがやっていることに適したタイプを使用してください。

例えば、パディングビットなしで正確に16ビット幅の符号なしタイプが必要な場合は、<stdint.h>で定義されたuint16_tを使用します。

あなたは少なくとも 16ビット幅ですunsigned型が必要な場合は、uint_least16_t、またはuint_fast16_t、またはshort、またはintを使用することができます。

あなたが思うようにしばしば正確な幅のタイプを必要としません。重要なことは、タイプの正確なサイズではなく、サポートする値の範囲です。しかし、正確に表現することは、外部で定義されたデータフォーマットに接続するときに重要です。その場合は、使用する型を示す宣言が既にあるはずです。

は、予め定義されたタイプの範囲に特定の要件がある:charは、少なくとも8ビット、shortintを少なくとも16ビット、longは、少なくとも32ビットであり、long longは、少なくとも64ビットであるです。また、shortは少なくともcharintは少なくともshortと同じ幅であり、等である。 (標準では最小範囲が指定されていますが、最小サイズは範囲とバイナリ表現が必要であるという事実から導き出すことができます。)

<stdint.h>はCヘッダーです。 #includeをC++プログラムで使用すると、型名はグローバル名前空間に直接インポートされ、std名前空間にインポートされる場合もあります。もインポートされます。 #include <cstdint>の場合、タイプ名はstd名前空間にインポートされ、もグローバル名前空間にインポートされる場合とされない場合があります。 UINT32_MAXのようなマクロ名はどの名前空間にもありません。彼らは常にグローバルです。いずれのバージョンのヘッダーも使用できます。接頭辞std::を使用しているか使用していないか一貫してください。

3

C++標準では、整数型(例えば、int,longまたはcharなど)のサイズはあまり指定されていません。特定のタイプがプラットフォーム間で固定サイズであることを確認したい場合は、C++ 11のFixed-width integer typesを使用できます。これらは標準化されており、サイズが保証されています。

これらを使用するには、#include <cstdint>

C++の標準では標準タイプのサイズは今後変更されませんか?

8ビットコンピュータでは、整数型のサイズが今日のものと異なりました。将来、2042では1024ビットの台のコンピュータを使用して、long longを1024ビット長と仮定します。

しかし、我々はほとんど確実に、std::uint32_tは32ビットのままになります。

+1

準拠しているCまたはC++の実装では、演算を実装するために余分なCPU命令が必要な場合でも、少なくともintの幅を少なくとも16ビットにする必要があります。そして、intとintを混同しないでください。たとえば、 'char'は通常8ビット幅の整数型です。 –

+0

私はさらに進んで、8ビットの 'int's(あなたが私が間違っていることを証明するためにちょうど1つのフォークを調整しない限り)がまともでない、または狂気のCコンパイラがないことを述べます。 –

関連する問題