[英]Are the integer types included in the stdint.h library "extended integer types"?
我正在學習 integer 轉換等級,但我有一個問題,我經常使用 stdint.h 庫,對於我讀到的關於“整數轉換等級”的內容,它說:
“任何標准 integer 類型的等級應大於任何具有相同大小的擴展 integer 類型的等級。”
對於我所知道的“int”,例如,是一個標准的 integer 類型,但是使用 stdint.hi 有等於“int”的“int32_t”
我知道 stdint.h 庫使用“typedef”,所以理論上 int 和 int32_t 是相等的,但我在論壇上讀到“擴展 integer 類型”使用 (u)intxx_t 來引用
所以我的問題是,stdint.h 庫中包含的“精確寬度整數”是“標准 integer 類型”還是被認為是“擴展 integer 類型”?
感謝您的回答!
stdint.h
中列出的類型不一定是擴展的 integer 類型。
C 標准的第 6.2.5 節定義了擴展的 integer 類型:
4有五種標准的有符號 integer 類型,指定為
signed char
、short int
、int
、long int
和long long int
。 (如 6.7.2 中所述,這些類型和其他類型可以用幾種額外的方式指定。)也可能有實現定義的擴展簽名 integer 類型。 標准和擴展簽名 integer 類型統稱為簽名 integer 類型。...
7標准有符號integer類型和標准無符號integer類型統稱為標准integer類型,擴展有符號integer類型和擴展無符號integer類型統稱為擴展integer類型
所以上面聲明擴展 integer 類型是實現定義的。
第 7.20p4 節描述了 stdint.h header 中定義的類型:
對於實現提供的此處描述的每種類型, 261)
<stdint.h>
應聲明該 typedef 名稱並定義關聯的宏。 相反,對於此處描述的實現未提供的每種類型,<stdint.h>
不應聲明該 typedef 名稱,也不應定義關聯的宏。 實現應提供那些描述為“必需”的類型,但不需要提供任何其他類型(描述為“可選”)。
所以這表明stdint.h
中的類型是其他類型的類型定義。 關鍵部分是腳注 261,其中指出:
- 其中一些類型可能表示實現定義的擴展 integer 類型。
因此, stdint.h
中的類型是否被視為標准類型或擴展 integer 類型取決於它們是什么類型定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.