標籤:
----資料類型長度
C99標準並不規定具體資料類型的長度大小。電腦具有不同位元的處理器,16,32和更高位的64位處理器,在這些不同的平台上,同一種資料類型具有不同的長度。
char,short,長度相同,分別為1和2個位元組。
int 在32和64位處理器上皆為4個位元組,在16位上是2個位元組。
long在16和32位處理器上皆為4個位元組,在64位上是8個位元組。
long long 在16和32位處理器上皆為8個位元組.
指標類型的位元與各個處理器的位元相同,分別位16,32,64位。
為了便於平台的移植,需要確保資料類型長度的一致,引用stdint.h標頭檔,利用宏定義固定資料類型的長度。
typedef signed char int8_ttypedef short int int16_t;typedef int int32_t;# if __WORDSIZE == 64typedef long int int64_t;# else__extension__typedef long long int int64_t;
//unsigned type is the same and omitted here
----uintptr_t,intptr_t
指標類型的長度與處理器的位元相同,需要對指標進行運算時,利用intptr_t類型,引用stddef.h標頭檔
#if __WORDSIZE == 64typedef long int intptr_t;#elsetypedef int intptr_t;#endif
//unsigned type is the same and omitted here
----編程中要盡量使用sizeof來計算資料類型的大小
----size_t, ssize_t (in stddef.h)
Are the types size_t and uintptr_t equivalent?(http://www.viva64.com/en/k/0024/)
二者數值上相同,同處理器步長。
--in practice you can consider them equivalent and use them as you like.
Usually size_t is used to emphasize we are dealing with a object containing same size,number of elements or iterations; The type uintptr_t is good for pointers.
C 資料類型 長度