2011-04-15 427 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 }; 
相关问题