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_tuintmax_t 是實現支援的最大整數型別。這些型別是強制性的。

指定用法或提高可讀性

如果一組資料有特定用途,可以使用 typedef 為其提供有意義的名稱。此外,如果資料的屬性發生變化,基本型別必須更改,則只需更改 typedef 語句,而不是檢查整個程式。