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