uint和unsigned int之间的区别?

the*_*man 56 c gcc uint

有什么区别uintunsigned int?我正在寻找网站,但所有问题都是指C#或C++.我想要一个关于C的答案.

请注意,我在Linux下使用GCC.

Eri*_*rik 73

uint不是标准类型 - unsigned int是.

  • 这个事实意味着什么? (13认同)
  • @the_candyman:你的gcc可能恰好有'uint` - 或者它可能碰巧没有它.它*将*具有`unsigned int` (13认同)
  • 用`uint`编写的代码本身不是可移植的,除非`uint`是你在该代码中实际声明的`typedef`. (11认同)
  • 一个更好的说法是'uint`不是C语言的一部分,而是一些懒惰的人定义的`typedef`.:-) (3认同)

tas*_*oor 35

某些系统可能将uint定义为typedef.

typedef unsigned int uint;

对于这些系统,它们是相同的.但uint不是标准类型,因此每个系统可能都不支持它,因此它不可移植.

  • @Blagovest:`uintXX_t`类型只在特定的C99实现中定义,如果有它们是有意义的.`uint_leastXX_t`在所有C99实现中定义.而且,这些类型在以前的标准版本中并不存在(并非所有当前的C编译器都是C99编译器). (3认同)
  • 值得注意的是,如果你真的想要一个特定大小的unsigned int,那么使用`uintXX_t`. (2认同)

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)


Teo*_*gul 8

unsigned int是一个内置(标准)类型,因此如果您希望您的项目是跨平台的,请始终使用,unsigned int因为它保证所有编译器都支持(因此是标准).


Tre*_*key 8

这里的所有答案都没有提到真正的原因uint.
这显然是一个typedefunsigned 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)

  • 这是一个可能的原因,但是您能举一个例子来说明这是真正的原因吗? (3认同)