2011-04-15 129 views

回答

53

uint不是標準類型 - unsigned int是。

+7

這個事實意味着什麼? – 2011-04-15 14:15:55

+8

@the_candyman:你的gcc可能碰巧有`uint` - 或者它可能碰巧沒有它。它*會*具有`unsigned int` – Erik 2011-04-15 14:16:36

+10

用`uint`編寫的代碼不會是固有的可移植的,除非`uint`是一個你在代碼中實際聲明的`typedef`。 – Jack 2011-04-15 14:17:55

30

某些系統可能將uint定義爲typedef。

typedef unsigned int uint;

對於這些系統,他們都是一樣的。但uint不是標準類型,所以每個系統都可能不支持它,因此它不是便攜式的。

7

unsigned int是一個內置的(標準)類型,所以如果你想讓你的項目是跨平臺的,總是用unsigned int,因爲它是guarantied通過所有的編譯器(因此是標準)的支持。

14

我對埃裏克泰奧曼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 
6

這裏的答案所有不能不提的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 }; 
相關問題