簡體   English   中英

是否有必要包括<stdint.h>保證 C99 新類型的可移植性?</stdint.h>

[英]Is it necessary to include <stdint.h> to guarantee portability of C99 new types?

根據我的理解,C99 新類型如uint32_tuint_fast64_tuintmax_t等在<stdint.h>中定義。 但是,我注意到它們也在stdlib.h中定義,並且從gnu.org我發現它是檢查的許多標頭之一,但在其他網站中僅引用<stdint.h>

如果我只使用這些類型,包括在我的實現中定義的<stdlib.h> ,我的程序是否可以移植到其他平台或者它不能工作,因為在另一台計算機上它們只在<stdint.h>中定義?

我的猜測是,如果我從我的計算機上為每個體系結構/操作系統編譯程序,就不會有任何問題,但編譯可能會從另一個編譯失敗,因為在那個特定的實現中,新類型只在另一個 header 中定義。

是否有必要包含 <stdint.h> 以保證 C99 新類型的可移植性?

是的,或者<inttypes.h> 並不是真正為了“保證可移植性”,而是包含<stdint.h>隨時在任何編譯器中使用這些類型。 請注意, uint32_t和所有intN_t類型都是可選的 - 即使在包含stdint.h之后,它們也可能(可能...)不可用。

如果我只使用這些類型,包括在我的實現中定義的 <stdlib.h>,我的程序是否可以移植到其他平台,或者它不能工作,因為在另一台計算機上它們只在 <stdint.h> 中定義?

它不能工作。

可能會從另一個失敗,因為在那個特定的實現中,新類型只在另一個 header 中定義。

是的。

從 gnu.org 我發現它是檢查的許多標頭之一

您引用的站點是關於用於構建 GCC 編譯器本身的構建系統配置,它與 GCC 在編譯程序時提供的內容無關。 GCC 僅針對二進制補碼平台編譯,您可以確定當您使用 GCC 時stdint.h將可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM