typedef 規範
A typedef宣告引入的名稱,在其範圍內,就會變成型別所給定的型別宣告宣告的部分。
typedef type-declaration synonym;
備註
您可以使用 typedef 宣告建構短一點或更有意義的名稱已經由語言所定義的型別 ; 您所宣告的型別。Typedef 名稱可讓您將封裝可能會變更的實作細節。
相較之下, 類別, struct, 等位,和enum宣告, typedef宣告並不會引入新的型別,就是引入新的名稱,對於現有的型別。
Typedef 名稱共用命名空間與一般識別項。因此,程式可以包含 typedef 名稱以及本機領域的識別項相同的名稱。
如需詳細資訊,請參閱:
範例
// typedef_specifier1.cpp
typedef char FlagType;
int main()
{
}
void myproc( int )
{
int FlagType;
}
當宣告 typedef,名稱相同的本機領域的識別項或宣告結構或等位內部範圍內或相同範圍中的成員,就必須指定型別規範。例如:
typedef char FlagType;
const FlagType x;
若要重複使用FlagType必須提供識別項、 結構成員,或等位成員、 型別名稱:
const int FlagType; // Type specifier required
還不夠說:
const FlagType; // Incomplete specification
因為FlagType會被取為型別,而不會被重新宣告的識別項的一部分。這個宣告會被取為不合法的宣告,如
int; // Illegal declaration
您可以宣告 typedef,包括指標、 函式,以及陣列型別具有任何型別。您可以宣告 typedef 名稱的結構或等位型別的指標之前定義的結構或等位型別,前提是定義具有相同的可視性和宣告。
範例
使用一typedef宣告,就是讓更一致且精簡的宣告。例如:
typedef char CHAR; // Character type.
typedef CHAR * PSTR; // Pointer to a string (char *).
PSTR strchr( PSTR source, CHAR target );
typedef unsigned long ulong;
ulong ul; // Equivalent to "unsigned long ul;"
若要使用typedef在基本和衍生的型別中指定相同的宣告,您可以使用逗號分隔多個宣告。例如:
typedef char CHAR, *PSTR;
下列範例會提供型別DRAWF不傳回任何值,並採取兩個 int 引數的函式:
typedef void DRAWF( int, int );
在上述的後typedef陳述式、 宣告
DRAWF box;
對應至宣告
void box( int, int );
typedef通常與結合struct來宣告及命名使用者定義型別:
// typedef_specifier2.cpp
#include <stdio.h>
typedef struct mystructtag
{
int i;
double f;
} mystruct;
int main()
{
mystruct ms;
ms.i = 10;
ms.f = 0.99;
printf_s("%d %f\n", ms.i, ms.f);
}