uint
和unsigned int
之間有什麼區別嗎? 我正在尋找網站,但所有問題都涉及到C#或C++。 我想回答關於C.uint和unsigned int之間的區別?
請注意,我在Linux下使用GCC。
uint
和unsigned int
之間有什麼區別嗎? 我正在尋找網站,但所有問題都涉及到C#或C++。 我想回答關於C.uint和unsigned int之間的區別?
請注意,我在Linux下使用GCC。
uint
不是標準類型 - unsigned int
是。
某些系統可能將uint定義爲typedef。
typedef unsigned int uint;
對於這些系統,他們都是一樣的。但uint不是標準類型,所以每個系統都可能不支持它,因此它不是便攜式的。
的unsigned int
是一個內置的(標準)類型,所以如果你想讓你的項目是跨平臺的,總是用unsigned int
,因爲它是guarantied通過所有的編譯器(因此是標準)的支持。
我對埃裏克泰奧曼Soygul延伸位答案和taskinoor
UINT不是一個標準。
因此,使用你自己的速記這樣氣餒:
typedef unsigned int uint;
如果你尋找平臺的特異性,而不是(例如,你需要指定位的INT佔據數),其中包括stdint.h:
#include <stdint.h>
將暴露下面的標準類別的整數:
種具有一定精確寬度
具有至少某些特定寬度整數類型整數類型
最快整數類型的具有至少某些特定寬度
整數類型足夠寬以保持指針到物體
具有最大寬度的整數類型
例如,
精確寬度的整數類型
typedef名INTÑ_t表示具有寬度 N,沒有填充位有符號整數型和二進制補碼錶示。因此, int8_t表示寬度恰好爲8位的帶符號整數類型。
typedef名稱uint N _t指定寬度爲N的無符號整數類型,因此,uint24_t表示寬度爲 的無符號整數類型,其正整數爲24位。
定義
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
這裏的答案所有不能不提的uint
的真正原因。
很明顯,這是unsigned int
的typedef
,但這並不能解釋它的用處。
真正的問題是,
爲什麼會有人要的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 };
這個事實意味着什麼? – 2011-04-15 14:15:55
@the_candyman:你的gcc可能碰巧有`uint` - 或者它可能碰巧沒有它。它*會*具有`unsigned int` – Erik 2011-04-15 14:16:36
用`uint`編寫的代碼不會是固有的可移植的,除非`uint`是一個你在代碼中實際聲明的`typedef`。 – Jack 2011-04-15 14:17:55