现代C++中uintptr_t类型的头文件是什么?

26
我发现在 C99 中应该使用 #include <stdint.h>,而且这个头文件似乎也适用于我的 C++03 gcc 编译器,但是对于现代 C++ 来说,这个头文件是否正确且可移植呢?

2
-1: 表示没有费力去查找 易于搜索的在线参考资料 - Nicol Bolas
9
我认为目标是在stackoverflow上解答问题,仅因信息可以通过谷歌搜索并非意味着一个问题没有价值。或许我误解了这个网站的目的吗? - WilliamKF
3
尊敬的Nawaz,我认为这个页面上有证据与你所说的WilliamKF及其动机相矛盾。 - Drew Dormann
1
我已更新问题,包括我所做的努力揭示出的答案。如果这更符合预期的风格,请告诉我,谢谢! - WilliamKF
2
@Nawaz:(以及任何人)请随意在这里继续讨论:http://meta.stackexchange.com/questions/145644 - Wesley Murch
显示剩余12条评论
5个回答

24
在C++11中,它位于<cstdint>中。
在语言的旧版本中,它并不存在官方支持;但许多编译器以扩展的形式提供了C99库,在这种情况下,可以在<stdint.h>中找到它。

5

C++中的标准头文件为cstdint

#include <cstdint>

4

在stdint.h中定义:

#include <stdint.h>

1
该头文件是为了与 C 的向后兼容而存在的。它会在全局命名空间中定义 uintptr_t,但不会在 namespace std 中定义。你可以期望所有以 .h 结尾的标准头文件都不会使用命名空间。 - Drew Dormann
谢谢Drew,我错过了那个。 - WilliamKF
1
@DrewDormann - 他们并不一定不知道命名空间。标准的C头文件需要将它们的名称放在全局命名空间中,并且允许将它们放在namespace std中。同样,C++头文件的类比需要将它们的名称放入namespace std中,并且现在也允许将它们放在全局命名空间中(这是对现有实现的一种妥协)。 - Pete Becker

2

需要包含cinttypescstdint


<cinttypes> 没有定义 uintptr_t。它主要定义了一些宏,可以在使用 printfscanf 及其衍生函数时作为格式说明符使用,用于 <cstdint> 中定义的类型。 - Pete Becker
1
@PeteBecker <cinttypes> 包括 <cstdint> - obataku

0

这是C99中的可选类型,位于文件中。许多C++03编译器都提供了该文件。它也出现在C++11中,位于文件中,同样是可选的,并且引用C99进行定义。包含 stdint.h


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