typedef 規範
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
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);
}