uint
和unsigned int
之间有什么区别吗?
我正在查看这个网站,但所有的问题都涉及C#或C++。 我想要一个关于C语言的答案。
如果相关的话,请注意我在Linux下使用GCC。
uint
不是标准类型 - 标准类型为 unsigned int
。
uint
,也可能没有。它一定会有unsigned int
。 - Erikuint
是在代码内声明的 typedef
,否则使用 uint
编写的代码本质上不具备可移植性。 - Jackuint
并不是 C 语言的一部分,而是一些懒惰的人定义的 typedef
。 :-) - R.. GitHub STOP HELPING ICEtypedef unsigned int uint
是完全安全的吗? - Antonio有些系统可能会将 uint 定义为一种 typedef。
typedef unsigned int uint;
对于这些系统来说,它们是相同的。但是 uint 不是标准类型,因此并不是每个系统都支持它,因此它不具备可移植性。
uintXX_t
。 - Blagovest BuyuklievuintXX_t
类型仅在特定的 C99 实现中定义。 uint_leastXX_t
在所有 C99 实现中都定义。这些类型在标准的早期版本中并不存在(不是所有当前的 C 编译器都是 C99 编译器)。 - pmg我稍微扩展了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
所有这里的回答都未提到uint
的真正原因。
很明显,它是unsigned int
的typedef
,但这并不能解释其有用性。
真正的问题是,
为什么有人想要将基本类型定义为缩写形式?
为了节省键入时间吗?
不,他们出于必要而这样做。
考虑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 };
unsigned int
是内置(标准)类型,因此如果您希望您的项目跨平台,请始终使用unsigned int
,因为它保证被所有编译器支持(因此成为了“标准”)。
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
uint
只是在types.h
中定义的一个typedef。 - anilbeytypedef unsigned int uint; /* Sys V兼容性 */
- anilbey