【发布时间】:2011-07-07 00:52:46
【问题描述】:
可能重复:
Datatypes used in C
嗨 我正在从 Linux 移植到 Visual C++。我发现了很多错误。 什么是 u_int32_t ? 我在 Visual C++ 中找不到它?它仅在 Linux 中可用吗?我应该在 Visual C++ 中使用哪种类型? 提前谢谢!!!
凯文
【问题讨论】:
标签: c++ c visual-c++
可能重复:
Datatypes used in C
嗨 我正在从 Linux 移植到 Visual C++。我发现了很多错误。 什么是 u_int32_t ? 我在 Visual C++ 中找不到它?它仅在 Linux 中可用吗?我应该在 Visual C++ 中使用哪种类型? 提前谢谢!!!
凯文
【问题讨论】:
标签: c++ c visual-c++
C99 标头stdint.h 定义了不依赖于体系结构或编译器的类型。 unsigned int 的含义可能不同(例如,在 16 位系统上为 16 位宽),但来自 stdint.h 的那些类型具有特定的大小。
要么是额外的下划线意外滑入其中,要么是有人为某个库或其他什么重新输入了它们。如果是后一种情况,请包含您自己的一些标头,在该标头中包含stdint.h,并确保在包含后添加typedef uint32_t u_int32_t。
【讨论】:
这些不太标准的名称似乎是由 BSD 引入的:http://lists.freedesktop.org/archives/release-wranglers/2004-August/000923.html
【讨论】:
我不完全确定确切的类型,但根据名称,它看起来像一个无符号 32 位整数。 Visual C++ 中对应的类型是 unsigned int。
还有其他别名,但这个名字就足够了。
【讨论】:
这是一个 int 数据类型,无符号保证为 32 位。要使用它,您需要包含stdint.h。
我不确定这是否可以直接在最新版本的 VC++ 中使用。维基百科页面包含与 Microsoft 编译器一起使用的各种实现的链接(例如 msinttypes)。
如果您确定默认的 unsigned int 类型始终为 32 位,您可以直接用 unsigned int 代替它。但最好使用明确的 32 位数据类型。
【讨论】:
stdint.h。但是stdint.h 提供了标准名称uint32_t,而不是本问题中提到的u_int32_t。
不确定u_int32_t,但uint32_t 是standard type according to the 1999 version of the C standard,来自<stdint.h>。
Visual C++ 已选择不采用 C99,因此那里不支持它。如果您包含<windows.h>,您可以只使用DWORD,它的大小相同且未签名。
【讨论】:
stdint.h 来提供这些类型定义。
int8_t, uint8_t ... uint32_t)。它不提供u_int32_t,如果我之前的评论表明它提供了,对不起。