【问题标题】:Is it necessary to include <stdint.h> to guarantee portability of C99 new types?是否需要包含 <stdint.h> 以保证 C99 新类型的可移植性?
【发布时间】:2021-04-07 09:42:01
【问题描述】:

据我了解,uint32_tuint_fast64_tuintmax_t 等 C99 新类型在 &lt;stdint.h&gt; 中定义。但是,我注意到它们也在stdlib.h 中定义,并且从gnu.org 我发现它是检查的众多标头之一,但在其他网站中仅引用了&lt;stdint.h&gt;

如果我使用这些类型,包括仅在我的实现中定义的&lt;stdlib.h&gt;,我的程序是否可以移植到其他平台,或者它无法工作,因为在另一台计算机上它们只在&lt;stdint.h&gt; 中定义?

我的猜测是,如果我从我的计算机为每个架构/操作系统编译程序,不会有任何问题,但是编译可能会从另一个失败,因为在那个特定的实现中,新类型只在另一个头文件中定义.

【问题讨论】:

  • 您应该始终为您使用的内容包含正确的标题。

标签: c types portability stdint


【解决方案1】:

是否需要包含 以保证 C99 新类型的可移植性?

是的,或者&lt;inttypes.h&gt;。并不是真的“保证可移植性”,而是包含&lt;stdint.h&gt; 以便随时在任何编译器中使用这些类型完全。请注意,uint32_t 和所有 intN_t 类型都是可选的 - 即使在包含 stdint.h 之后,它们也可能(可能...)不可用。

如果我使用这些类型,包括仅在我的实现中定义的 ,我的程序是否可以移植到其他平台,或者它不能工作,因为在另一台计算机上它们只在

它无法工作。

可能会从另一个失败,因为在该特定实现中,新类型仅在另一个标头中定义。

是的。

从 gnu.org 我发现它是检查的众多标头之一

您引用的站点是关于用于构建 GCC 编译器的构建系统配置本身,它与编译程序时 GCC 提供的内容无关。 GCC 仅编译 for 二进制补码平台,您可以确定在使用 GCC 时stdint.h 将可用。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2022-11-16
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多