有什么区别uint
和unsigned int
?我正在寻找网站,但所有问题都是指C#或C++.我想要一个关于C的答案.
请注意,我在Linux下使用GCC.
Eri*_*rik 73
uint
不是标准类型 - unsigned int
是.
tas*_*oor 35
某些系统可能将uint定义为typedef.
typedef unsigned int uint;
对于这些系统,它们是相同的.但uint不是标准类型,因此每个系统可能都不支持它,因此它不可移植.
Yau*_*ich 17
我正在通过Erik,Teoman Soygul和taskinoor扩展一些答案
uint不是标准.
因此,不鼓励使用你自己的速记:
typedef unsigned int uint;
如果您寻找平台特异性(例如,您需要指定int占用的位数),包括stdint.h:
#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)
将公开以下标准的整数类别:
具有一定精确宽度的整数类型
具有至少某些指定宽度的整数类型
具有至少特定指定宽度的最快整数类型
整数类型足够宽,可以保存指向对象的指针
具有最大宽度的整数类型
例如,
精确宽度整数类型
type_f name 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
Run Code Online (Sandbox Code Playgroud)
这里的所有答案都没有提到真正的原因uint
.
这显然是一个typedef
的unsigned int
,但是,这并不说明它的用处.
真正的问题是,
为什么有人想要将基本类型定义为缩写版本?
为了节省打字?
不,他们是出于必要而做到的.
考虑C语言; 一种没有模板的语言.
你会怎样去剔除你自己的可以容纳任何类型的向量?
您可以使用void指针执行某些操作,
但是更接近模板的模拟会让您使用宏.
所以你要定义模板向量:
#define define_vector(type) \
typedef struct vector_##type { \
impl \
};
Run Code Online (Sandbox Code Playgroud)
声明你的类型:
define_vector(int)
define_vector(float)
define_vector(unsigned int)
Run Code Online (Sandbox Code Playgroud)
一代又一代,意识到这些类型应该是一个单一的标记:
typedef struct vector_int { impl };
typedef struct vector_float { impl };
typedef struct vector_unsigned int { impl };
Run Code Online (Sandbox Code Playgroud)