2013-06-05 61 views
26

UInt8uint8_tの間の差異、またはUInt16unit16_tの間の差異は何ですか?UInt8とuint8_tの相違点

_tは何を意味しますか?

+3

'_t' =標準データ型のクロスプラットフォーム実装。 – sgarizvi

+0

'_t'は 'type'の略で、Linuxシステムや' C'や 'C++'標準の多くの場所で使われている規約です。 'Uint8'と' uint8_t'の違いは実装に依存しますが、通常は両方とも8ビットの符号なし整数になります。また、 'uint8_t'と' uint16_t'は 'stdint.h'ヘッダのC(とC++の)標準で定義されています。私が知る限り、' Uint8'と 'Uint16'は非標準です。 – jcxz

答えて

28

C99では、使用可能な基本整数型(_tなしの型)は、実際のサイズがシステムによって異なる可能性があるため、不十分とみなされていました。

したがって、C99標準には、プログラムの移植性を高めるためのいくつかの新しい整数型の定義が含まれています。新しいタイプは、組み込み環境で特に便利です。

すべての新しいタイプは末尾に_tが付いており、すべてのシステムで一様に定義されていることが保証されています。

詳細はfixed-width integer types section of the wikipedia article on Stdintを参照してください。

+1

'uint8_t'と' uint16_t'は確かにC99の一部です。つまり、固定サイズの必要性はC99より前であるため、独自のタイプを提供することによって、異なるコードベースがこのニーズに対応しました。 OS Xは/usr/include/MacTypes.hに 'UInt8'と' UInt16'を定義しています。 –

+0

"新しいタイプはすべて_tで始まり、すべてのシステムで一様に定義されることが保証されています。"が真でない場合、 '(u)int_leastN_t'と'(u)int_fastN_t'があります。固定幅タイプのみを意味していました。 –

+0

実際、すべてのシステムでサイズが同じであることについては何も言おうとしていませんでした。実際のサイズは、あなたが言及しているように、固定幅(正確な幅)タイプに対してのみ保証されています。ただし、定義はすべてのシステムで同じです。例えば、int_leastN_tは実装で利用できる最小の型であると定義されています。定義はシステムに関係なく同じです。 – vdbuilder

0

通常、これらはtypedefデータ型として使用されます。 "_t"はtypedefデータ型を表します。 このような名前を付けると、すべてのファイルまたは巨大なコードベースで簡単に使用して読み込むことができます。

* UINT8とuint8_t - チャー*

unit8_t unsigned char型のtypedef

* UInt16型とunit16_t *

unit16_t unsigned int型のtypedef(16ビットコンパイラに)

0

主な違いは、uintX_tタイプがC99以降で定義された標準Cであり、UIntXはそうではありません。これはコードがどのように移植可能であるかに影響します。 uintX_tタイプを使用するコードは、標準のCコンパイラで他の依存関係なしにコンパイルできます。一方、UIntXを使用するコードでは、それらの型自体を定義するか、そうするライブラリまたはフレームワークに依存する必要があります。

私はObjective-Cのように余分な整数型を定義しているとは思っていませんが、フレームワーク(Coacoa、OpenStep?あなたのコードがフレームワーク外で意味をなさない場合は、フレームワークコンテキストで何が慣用的であるかを使用してください。それ以外の場合は、標準タイプに固執してください。

関連する問題