Typedef 宣告
Typedef 宣告為具有 typedef 的宣告,以儲存類別。 宣告子會成為新的型別。 您可以使用 typedef 宣告建構短一點或更有意義的名稱已經由 c 所定義的型別 ; 您所宣告的型別。 Typedef 名稱可讓您將封裝可能會變更的實作細節。
Typedef 宣告會被解譯為變數相同的方式或函式宣告,但是識別項,而不要假設型別宣告中,所指定的型別。
語法
declaration:
宣告規範初始化宣告子清單選擇**;**宣告規範:
儲存類別規範的宣告規範opt型別規範的宣告規範opt
型別限定詞的宣告規範opt
儲存類別規範:
typedef型別規範:
voidchar
short
int
long
float
double
帶正負號
不帶正負號
結構或位等位的規範
列舉規範
typedef 名稱
typedef 名稱:
identifier
請注意 typedef 宣告並不會建立型別。 它會建立同義資料表的現有型別或無法以其他方式指定的型別名稱。 為型別規範使用 typedef 名稱時,它可以配合特定的型別規範,而不論。 可接受的修飾詞包括 const 和volatile。
Typedef 名稱都共用一般的識別項的命名空間 (請參閱命名空間如需詳細資訊)。 因此,程式可以包含 typedef 名稱以及本機領域的識別項相同的名稱。 例如:
typedef char FlagType;
int main()
{
}
int 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 名稱可用來改善程式碼的可讀性。 下列的宣告的所有三個signal指定完全相同的型別,第一次無需進行任何 typedef 名稱的使用。
typedef void fv( int ), (*pfv)( int ); /* typedef declarations */
void ( *signal( int, void (*) (int)) ) ( int );
fv *signal( int, fv * ); /* Uses typedef type */
pfv signal( int, pfv ); /* Uses typedef type */
範例
下列範例說明 typedef 宣告:
typedef int WHOLE; /* Declares WHOLE to be a synonym for int */
請注意, WHOLE無法現在已經可用在變數宣告為WHOLE i;或const WHOLE i;。 不過,宣告long WHOLE i;是不合法的。
typedef struct club
{
char name[30];
int size, year;
} GROUP;
此陳述式宣告GROUP為結構的型別具有三個成員。 自結構標記, club,也指定 typedef 名稱 (GROUP) 或結構的標記可用於宣告。 您必須使用結構關鍵字有索引標籤,而且您不能使用具有 typedef 名稱的結構的關鍵字。
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
型別PG宣告為變數的指標, GROUP型別,則定義為結構的型別。
typedef void DRAWF( int, int );
本範例提供的型別DRAWF不傳回任何值,並採取兩個 int 引數的函式。 這表示,例如,宣告
DRAWF box;
相當於在宣告
void box( int, int );