62

uint和有什么区别unsigned int吗?

我正在查看此站点,但所有问题均涉及 C# 或 C++。我想要一个关于 C 语言的答案。

如果相关,请注意我在 Linux 下使用 GCC。

4

6 回答 6

83

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

于 2011-04-15T14:14:06.043 回答
42

一些系统可能将 uint 定义为 typedef。

typedef 无符号 int uint;

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

于 2011-04-15T14:18:37.590 回答
18

我正在扩展 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
于 2013-08-03T13:29:30.047 回答
9

这里的所有答案都没有提到uint.
它显然是 a typedefof unsigned int,但这并不能解释它的用处。

真正的问题是,

为什么有人想将基本类型定义为缩写版本?

为了节省打字?
不,他们这样做是出于必要。

考虑 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 };
于 2016-05-07T04:25:52.560 回答
8

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

于 2011-04-15T14:18:49.960 回答
1

Theuint是 . 的可能且正确的缩写unsigned int。它的可读性更好。但是:它不是 C 标准。您可以根据自己的职责定义和使用它(与所有其他定义一样)。但不幸的是,一些系统头文件也定义uint了。我sys/types.h从当前的编译器(ARM)中找到:

 # 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 resp。https://www.vishia.org/emc

于 2021-04-30T12:14:10.707 回答