2009-05-26 5 views
29

私はC++にはかなり新しくなっていますが、私はファンダメンタルズのハングアップを持っています。私は、 "Uint32"(さまざまな大文字で)と他のコードを読むときに同様のデータ型を使用していますが、それらに言及しているドキュメントは見つかりません。私は、 "Uint32"は32ビットの符号なしintであることを理解していますが、私のコンパイラではありません。私はVisual C++ expressを使用していますが、私はそれが何であるかを認識できません。「Uint32」、「int16」など。彼らは標準的なC++ですか?

デフォルトでこれらのデータ型を読み込むコンパイラがありますか、またはこれらのプログラマが自分自身をクラスまたは#define定数として宣言しているコンパイラはありますか?

通常の宣言はシステムによって異なるように見えるので、整数の使用期間を正確に知るために使用することができます。それらを使用して他の賛否両論はありますか?

答えて

11

Visual C++では、C99のサポートが含まれていないため、固定幅の整数型はサポートされていません。あなたがそれらを使用するために持っている様々なオプションのmy question on this subjectへの答えをチェックしてください。

+3

非常にいいです。私はそれがクロスプラットフォームなので、私はそれのためのブーストライブラリを使用していると思う。 Damn microsoftとそのdo-it-own-wayの原理 – Zoomulator

+3

マイクロソフトは本当にここに非難するつもりはありません。彼らは厳密に標準に準拠しています:C++はまだ標準化された固定サイズの番号型を持っていません。 –

+1

私はブーストタイプも使用しています。マイクロソフトは、これらのタイプがC++標準の一部になるため、最終的にこれらのタイプをサポートします。 –

13

C99ヘッダーファイルstdint.hは、この性質のtypedefをuint32_tの形式で定義しています。私の知る限り、標準C++では、名前空間stdのシンボルでcstdintバージョンを提供していませんが、コンパイラによってはC++コードのC99ヘッダーを含めることができます。次のバージョンのC++はcstdintヘッダーを提供します。

あなたは、多くの場合、彼らは通常、単にプロジェクト内でこれらのタイプを定義する単一のヘッダを提供し、このようなUint32_tUint32またはuint32としてこのテーマの非標準的なフォームなどを使用し、他の人からのコードが表示されます。おそらく、このコードはもともと長い間開発されていたもので、C99コンパイラが一般的になったときにsedに慣れずに定義を置き換えました。

+0

MSVCはタイプに敏感ではないようですので、特に:D –

1

Microsoftの場合はUINT32をお試しください。

大文字は、これがマクロとして定義されていることを明確にします。マクロをまだ含んでいない別のコンパイラを使用してコンパイルしようとすると、自分で定義することができ、コードを変更する必要はありません。

3

これを使用する主な理由は、64ビットと32ビットOSを切り替える際に起こりうる問題を心配する必要がないことです。

新しいレガシーコードに接続していて、32ビットまたは16ビットのものであった場合でも、潜在的な問題は回避されます。

+0

それはクロスプラットフォームプロジェクトで作業するときに覚えておくと良いことです。 – Zoomulator

+0

これらは、通信プロトコルで定義されているように、クライアントとサーバー間のワイヤを介して送信される整数が特定のサイズでなければならない分散アプリケーションを実装する場合にも非常に役立ちます。 – Void

19

UNIXプラットフォームでは、stdint.hにこれらの型を定義しています。これは、移植可能なコードを記述するときに型のサイズを決めるために推奨される方法です。

Microsoftのプラットフォームではこのヘッダーが定義されていないため、クロスプラットフォームに移行するときに問題になります。すでにBoost Integer Libraryを使用していない場合は、マイクロソフトのプラットフォームで使用するために、このヘッダのPaul Hsiehのportable stdint.h実装を取得することをお勧めします。

更新: Visual Studio 2010以降では、このヘッダーを定義します。

1

uint32 などはマクロによって定義されます。彼らはintやshortを要求したときにいくつのビットが得られるかというプラットフォーム間での保証はほとんどないという歴史的な移植性の問題を解決しています。 (今はMac用にコンパイルされたCコンパイルでは8ビットの短編が提供されています!)

関連する問題