web-dev-qa-db-ja.com

uintとunsigned intの違いは?

uintunsigned intに違いはありますか?私はサイトを探していますが、すべての質問はC#またはC++を参照しています。 Cについての回答をお願いします。

LinuxでGCCを使用していることに注意してください。

50
the_candyman

uintは標準タイプではありません-unsigned intです。

68
Erik

一部のシステムでは、uintをtypedefとして定義できます。

typedef unsigned int uint;

これらのシステムでは同じです。しかし、uintは標準タイプではないため、すべてのシステムでサポートされていない可能性があるため、移植性はありません。

33
taskinoor

Erik、Teoman Soygul、taskinoorの回答を少し拡張しています

uintは標準ではありません。

したがって、このように独自の速記を使用することは推奨されません。

typedef unsigned int uint;

stdint.h を含め、代わりにプラットフォームの特異性を探す場合(たとえば、intが占有するビット数を指定する必要がある場合):

#include <stdint.h>

以下の整数の標準カテゴリを公開します:

  • 特定の正確な幅を持つ整数型

  • 特定の幅以上の整数型

  • 少なくとも特定の指定された幅を持つ最速の整数型

  • オブジェクトへのポインターを保持するのに十分な幅の整数型

  • 最大幅の整数型

例えば、

正確な幅の整数型

Typedef名int N _tは、幅N、パディングビットなし、2の補数表現を持つ符号付き整数型を指定します。したがって、int8_tは、正確に8ビットの幅を持つ符号付き整数型を示します。

Typedef名uint N _tは、幅Nの符号なし整数型を指定します。したがって、uint24_tは、幅がちょうど24ビットの符号なし整数型を示します。

定義する

int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
17

ここでのすべての答えは、uintの本当の理由に言及していません。
明らかにunsigned inttypedefですが、その有用性を説明していません。

本当の質問は、

なぜ誰かが基本型を短縮版にtypedefしたいのですか?

入力を節約するには?
いいえ、彼らは不必要にそれをしました。

C言語を検討してください。テンプレートを持たない言語。
どのようなタイプも保持できる独自のベクターをどのように打ち消しますか?

Voidポインターを使用して何かを行うことができますが、
しかし、テンプレートのより近いエミュレーションでは、マクロに頼ることになります。

したがって、テンプレートベクトルを定義します。

#define define_vector(type) \
  typedef struct vector_##type { \
    impl \
  };

タイプを宣言します。

define_vector(int)
define_vector(float)
define_vector(unsigned int)

そして、生成時に、型は単一のトークンである必要があることを理解します。

typedef struct vector_int { impl };
typedef struct vector_float { impl };
typedef struct vector_unsigned int { impl };
8
Trevor Hickey

unsigned intは組み込み(標準​​)タイプであるため、プロジェクトをクロスプラットフォームにしたい場合は、常にunsigned intすべてのコンパイラでサポートされることが保証されているため(したがって、標準)。

7
Teoman Soygul