と の間に違いはuint
ありunsigned int
ますか?
私はこのサイトを見ていますが、すべての質問は C# または C++ に関するものです。C言語について回答お願いします。
関連する場合は、LinuxでGCCを使用していることに注意してください。
uint
は標準タイプではありませんunsigned int
。
システムによっては、uint を typedef として定義する場合があります。
typedef unsigned int uint;
これらのシステムでは、それらは同じです。ただし、uint は標準型ではないため、すべてのシステムでサポートされていない可能性があり、移植性がありません。
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
はunsigned int
組み込み (標準) 型であるため、プロジェクトをクロスプラットフォームにしたい場合unsigned int
は、すべてのコンパイラでサポートされることが保証されているため、常に使用してください (したがって、標準です)。
Theuint
は の適切な省略形ですunsigned int
。読みやすくなっています。ただし: C 標準ではありません。自分の責任で (他のすべての定義と同様に) 定義して使用できます。残念ながら、一部のシステム ヘッダーも定義されuint
ています。私はsys/types.h
現在のコンパイラ(ARM)から見つけました:
# ifndef _POSIX_SOURCE
//....
typedef unsigned short ushort; /* System V compatibility */
typedef unsigned int uint; /* System V compatibility */
typedef unsigned long ulong; /* System V compatibility */
# endif /*!_POSIX_SOURCE */
これは、Unix System V 標準としてプログラムされたおなじみのソースに対する譲歩のようです。この望ましくない動作をオフにするには (
#define uint unsigned int
自分で、最初に設定しました
#define _POSIX_SOURCE
システムのヘッダーは、標準ではないものを定義してはなりません。しかし、残念ながら、そこで定義されていることがたくさんあります。
私の Web ページhttps://www.visia.org/emc/html/Base/int_pack_endian.html#truean-uint-problem-admissibleness-of-system-definitionsも参照してください。https://www.visia.org/emc .