问题描述
|
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;
如果您要查找平台特定性(例如,您需要指定int占用的位数),包括stdint.h:
#include <stdint.h>
将公开以下标准整数类别:
具有一定精确宽度的整数类型
至少具有指定宽度的整数类型
具有至少某些指定宽度的最快整数类型
足够宽的整数类型,可以容纳指向对象的指针
具有最大宽度的整数类型
例如,
精确宽度整数类型
typedef名称int N _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
,unsigned int
是内置的(标准)类型,因此,如果您希望项目是跨平台的,请始终使用unsigned int
,因为它被保证可被所有编译器支持(因此为标准)。
,这里的所有答案都没有提到uint
的真正原因。
显然,它是ѭ1的ѭ10,但这并不能解释其用处。
真正的问题是
为什么有人要键入基本类型的缩写?
版?
节省打字?
不,他们是出于必要而这样做的。
考虑一下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 };