2

据我了解,C99中定义了新类型,例如uint32_t,uint_fast64_t等。但是,我注意到它们也在 中定义,并且从gnu.org我发现它是检查的众多标头之一,但仅在其他网站中被引用。uintmax_t<stdint.h>stdlib.h<stdint.h>

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

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

4

1 回答 1

3

是否需要包含 <stdint.h> 以保证 C99 新类型的可移植性?

是的,或者<inttypes.h>。并不是真的“保证可移植性”,而是包括随时在任何编译器中<stdint.h>使用这些类型。请注意,所有类型都是可选的 - 即使在包含.uint32_tintN_tstdint.h

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

它无法工作。

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

是的。

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

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

于 2020-12-30T22:59:51.973 回答