【问题标题】:What is the header file for the uintptr_t type in modern C++?现代 C++ 中 uintptr_t 类型的头文件是什么?
【发布时间】:2012-08-27 00:58:30
【问题描述】:

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

【问题讨论】:

  • -1:因为不想在easily searchable online references中查找它。
  • 我认为目标是在 stackoverflow 上回答问题,仅仅因为信息可以被谷歌搜索,并不意味着问题不值得,或者我误解了这个网站的目的?
  • 但我自己尝试过,我让我的应用程序工作,然后发布问题同时对我有用的答案以帮助下一个人。我不觉得我很懒惰,而是试图帮助下一个人。我的行为真的值得气馁吗?
  • @Nawaz 尊敬的,我相信此页面上的证据与您所说的 WilliamKF 及其动机相反。
  • @Nawaz:(和任何人)随时在这里继续讨论:meta.stackexchange.com/questions/145644

标签: c++ 32bit-64bit c99 stdint


【解决方案1】:

在 C++11 中,它位于 <cstdint>

在旧版本的语言中,它并没有正式存在;但是许多编译器将 C99 库作为扩展提供,在这种情况下,它可以在 <stdint.h> 中使用。

【讨论】:

    【解决方案2】:

    在 stdint.h 中定义:

    #include <stdint.h>
    

    【讨论】:

    • 该标头的存在是为了与 C 向后兼容。它在全局命名空间中定义 uintptr_t,而不是 namespace std。您可以期望所有以 .h 结尾的标准标头都不会识别命名空间。
    • 谢谢德鲁,我错过了。
    • @DrewDormann - 他们不一定不知道命名空间。标准 C 标头必须将它们的名称放在全局命名空间中,并且允许它们将它们放在 namespace std 中。同样,C 标头的 C++ 类似物需要将它们的名称放入 namespace std,现在也允许将它们放入全局命名空间(这是对现有实现的一种尊重)。
    【解决方案3】:

    在 C++ 中,标准头文件位于 cstdint

    #include <cstdint>
    

    【讨论】:

      【解决方案4】:

      包括cinttypescstdint

      【讨论】:

      • &lt;cinttypes&gt; 没有定义 uintptr_t。大多数情况下,当使用printfscanf 及其兄弟时,它定义的宏可用作&lt;cstdint&gt; 中定义的类型的格式说明符。
      • @PeteBecker &lt;cinttypes&gt; 包括&lt;cstdint&gt;
      【解决方案5】:

      它在 C99 中的 ,​​ 作为可选类型。许多 C++03 编译器确实提供了该文件。它也在 C++11 中,在 中,它也是可选的,并且它引用了 C99 的定义。包括 stdint.h

      【讨论】:

        猜你喜欢
        • 2019-04-22
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 2020-09-28
        • 2023-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多