uint
和unsigned int
之间有什么区别吗?
我正在寻找网站,但所有问题都是指C#或C ++。
我想要一个关于C的答案。
请注意,我在Linux下使用GCC。
答案 0 :(得分:67)
uint
不是标准类型 - unsigned int
是。
答案 1 :(得分:33)
某些系统可能将uint定义为typedef。
typedef unsigned int uint;
对于这些系统,它们是相同的。但uint不是标准类型,因此每个系统可能都不支持它,因此它不可移植。
答案 2 :(得分:16)
我正在通过Erik,Teoman Soygul和taskinoor扩展一些答案
uint 不是标准。
因此不鼓励使用你自己的速记:
<击> typedef unsigned int uint;
击>
如果您寻找平台特异性(例如,您需要指定int占用的位数),包括stdint.h:
#include <stdint.h>
将公开以下标准的整数类别:
具有一定确切宽度的整数类型
具有至少某些指定宽度的整数类型
具有至少特定指定宽度的最快整数类型
整数类型足以容纳指向对象的指针
具有最大宽度的整数类型
例如,
精确宽度整数类型
typedef name int N _t指定带宽的带符号整数类型 N,没有填充位,以及二进制补码表示。从而, int8_t表示有符号整数类型,宽度恰好为8位。
typedef名称uint N _t指定带有的无符号整数类型 因此,uint24_t表示具有宽度的无符号整数类型 正好是24位。
定义
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
答案 3 :(得分:7)
unsigned int
是内置(标准)类型,因此如果您希望项目是跨平台的,请始终使用unsigned int
,因为它保证所有编译器都支持(因此< em>标准)。
答案 4 :(得分:6)
这里的所有答案都未提及uint
的真正原因
它显然是typedef
的{{1}},但这并不能解释它的用处。
真正的问题是,
为什么有人想要将基本类型定义为缩写 版本
保存打字?
不,他们是出于必要而做到的。
考虑C语言;一种没有模板的语言 你会怎样去剔除你自己的可以容纳任何类型的向量?
你可以用虚拟指针做点什么,
但是更接近仿真模板会让你使用宏。
所以你要定义模板矢量:
unsigned int
声明您的类型:
#define define_vector(type) \
typedef struct vector_##type { \
impl \
};
一代又一代,意识到这些类型应该是一个单一的标记:
define_vector(int)
define_vector(float)
define_vector(unsigned int)
答案 5 :(得分:1)
uint
是 unsigned int
的可能且正确的缩写。可读性更好。但是:这不是 C 标准。您可以根据自己的职责定义和使用它(就像所有其他定义一样)。
但不幸的是,一些系统头文件也定义了 uint
。我在当前编译器 (ARM) 的 sys/types.h
中找到了:
# ifndef _POSIX_SOURCE
//....
typedef unsigned short ushort; /* System V compatibility */
typedef unsigned int uint; /* System V compatibility */
typedef unsigned long ulong; /* System V compatibility */
# endif /*!_POSIX_SOURCE */
对于熟悉的编写为 Unix System V 标准的源代码来说,这似乎是一种让步。关闭这种不受欢迎的行为(因为我想
#define uint unsigned int
我自己先设置的
#define _POSIX_SOURCE
系统的标题不能定义不标准的东西。但不幸的是,这里定义了很多东西。
另见我的网页 https://www.vishia.org/emc/html/Base/int_pack_endian.html#truean-uint-problem-admissibleness-of-system-definitions 和。 https://www.vishia.org/emc。