uint32和uint32_t的区别

95
这是一个重复的问题:
不同整数类型之间的区别 在C/C++中,uint32uint32_t有什么区别?
它们是否依赖于操作系统?
在哪种情况下应该使用其中之一?

1
在可能的情况下,您应该优先选择标准类型。在这种情况下,使用 uint32_t - John Dibling
3
大家可以在这里找到答案:https://dev59.com/pWgt5IYBdhLWcg3w0wzB - QArea
2
出于好奇 - "_t" 表示什么意思? - Gershom Maes
1
"type" 的速记。 - Chet
2个回答

123

uint32_t是标准用法,而uint32则不是。也就是说,如果你包含<inttypes.h>或者<stdint.h>头文件,你将得到一个uint32_t的定义。另外,uint32是一种在某些本地代码库中的typedef,但是除非你自己定义它,否则不能保证它存在。而且自己定义它是一个坏主意。


16
typedef uint32_t uint32 的意思是定义一个名为uint32的新类型,该类型是一个无符号32位整数。 - bot47
如果它不存在,你就无法编译你的程序,对吧?那么你可以像Max上面建议的那样去做。这有什么了不起的呢? - Rodrigo
2
@Rodrigo,“大问题”就像是做#define writef printf一样。从技术上讲,事情会很顺利。但它引入了不必要的混乱。你会惊讶地发现,像这样的简单typedef随着时间的推移会变形,直到代码库有类似typedef uint16_t uint32的东西,此时宇宙就会爆炸。 - William Pursell
是的,我已经梦想过了 :) - Rodrigo
1
为什么typedef uint32_t uint32不好?显然,认为某人不应该使用明智的typedef,因为有人可能会创建一个疯狂的typedef的论点是错误的。例如,我们不会说铅笔是邪恶的,因为一个疯狂的同事可能会拿起一支铅笔并用它刺伤别人。 - Jason Harris

29

uint32_t在标准中有定义,位于

18.4.1头文件<cstdint>概览[cstdint.syn]

namespace std {
//...
typedef unsigned integer type uint32_t; // optional
//...
}

uint32并不是一种数据类型,它只是一些编译器提供的快捷方式(可能是通过typedef uint32_t uint32实现),以便于使用。


3
<cstdint>标准化之前,很可能将其作为某个已知为无符号32位整数的类型定义。请注意,这里不会提供其他解释或信息。 - Benjamin Lindley
但是,“32位无符号整数”有什么不同呢? - Rodrigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接