[英]Content within types.h — where does the compiler define the width of int, signed int and others?
我同時閱讀了/usr/include/bits/types.h
和/usr/include/sys/types.h
,但只看到它們使用“ unsigned int”或“ signed int”為我們定義了其他一些相對很少使用的類型,例如:
typedef signed char __int8_t;
...
typedef signed int __int32_t;
要么:
#define __S32_TYPE int
#define __U32_TYPE unsigned int;
關於“原始定義的有signed int
(或int
)在哪里定義?” 和“在哪個文件中,gcc決定int
在我的x86-64服務器中應為4字節寬”? 我什么都找不到。
我想知道gcc / g ++編譯器為我們定義這些原始類型的過程,並希望查看原始的定義文件。 請告訴我最初的立場,或給我一些有關找到他們的方法的啟發。
int
, unsigned int
, long
和其他類型是系統類型,它們由編譯器本身定義。 編譯器對這些類型有一些要求,例如int
必須至少為16位,但是編譯器可能會使其更長。 通常, int
表示至少16位的最有效整數類型 。
您不應該依賴於int的實際大小,如果需要容納超過32767的int,請堅持使用long
或long long
類型。 如果由於所需的溢出行為而需要一定數量的位積分,則可以使用uint16_t
/ uint32_t
類型。 如果要確保至少有一定數量的位,還可以使用uint_fast16_t
/ uint_fast32_t
。
基本類型是編譯器固有的。 它們是在編譯編譯器時內置的,沒有在您可以輕松找到的任何地方定義。 (在代碼中的某些地方有相關信息,但是要找到它並不是特別容易。)
因此,您將無法直接在標題中找到該信息。 您可以從sizeof()
運算符獲取尺寸信息。 您可以從<limits.h>
和<float.h>
的宏推斷尺寸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.