Typedef 的簡單用法
用於為資料型別指定短名稱
代替:
long long int foo;
struct mystructure object;
一個人可以使用
/* write once */
typedef long long ll;
typedef struct mystructure mystruct;
/* use whenever needed */
ll foo;
mystruct object;
如果在程式中多次使用該型別,這會減少所需的鍵入量。
提高便攜性
資料型別的屬性因不同的體系結構而異。例如,int
在一個實現中可以是 2 位元組型別而在另一個實現中可以是 4 位元組型別。假設程式需要使用 4 位元組型別才能正確執行。
在一個實現中,讓 int
的大小為 2 位元組,long
的大小為 4 位元組。另一方面,int
的大小為 4 位元組,long
的大小為 8 位元組。如果程式是使用第二個實現編寫的,
/* program expecting a 4 byte integer */
int foo; /* need to hold 4 bytes to work */
/* some code involving many more ints */
要使程式在第一個實現中執行,所有 int
宣告都必須更改為 long
。
/* program now needs long */
long foo; /*need to hold 4 bytes to work */
/* some code involving many more longs - lot to be changed */
為避免這種情況,可以使用 typedef
/* program expecting a 4 byte integer */
typedef int myint; /* need to declare once - only one line to modify if needed */
myint foo; /* need to hold 4 bytes to work */
/* some code involving many more myints */
然後,每次只需更改 typedef
語句,而不是檢查整個程式。
Version >= C99
<stdint.h>
標頭和相關的 <inttypes.h>
標頭為各種大小的整數定義標準型別名稱(使用 typedef
),這些名稱通常是需要固定大小整數的現代程式碼中的最佳選擇。例如,uint8_t
是無符號的 8 位整數型別; int64_t
是帶符號的 64 位整數型別。uintptr_t
型別是一個無符號整數型別,足以容納任何指向物件的指標。這些型別在理論上是可選的 - 但很少有它們不可用。有一些變體,如 uint_least16_t
(最小的無符號整數型別,至少 16 位)和 int_fast32_t
(最快的有符號整數型別,至少 32 位)。此外,intmax_t
和 uintmax_t
是實現支援的最大整數型別。這些型別是強制性的。
指定用法或提高可讀性
如果一組資料有特定用途,可以使用 typedef
為其提供有意義的名稱。此外,如果資料的屬性發生變化,基本型別必須更改,則只需更改 typedef
語句,而不是檢查整個程式。