型定義の宣言
typedef 宣言はストレージ クラスとして型定義の宣言です。宣言は新しい型になります。typedef 宣言または関数の構築に既に C で定義されている型や宣言した型のもっとわかりやすい名前を使用できます。型定義の名前は変更されますが実装の詳細をカプセル化することができます。
typedef 宣言は変数または関数宣言と同様に解釈されますが宣言によって指定された型を想定する代わりに識別子は型のシノニムです。
構文
declaration:
宣言指定子 ; 宣言リスト optinit宣言指定子 :
ストレージ クラス指定子の宣言指定子 opt型指定子の宣言指定子 opt
宣言型修飾子の指定子 opt
ストレージ クラス指定子 :
typedef型指定子 :
voidchar
short
int
long
float
double
Signed
署名されていません
構造体または共用体指定子
列挙指定子
型定義名
型定義名 :
identifier
typedef 宣言に型を作成しないことに注意してください。そのほかの方法で指定できる型の既存の型または名前のシノニムを作成します。型定義の名前はの型指定子として使用すると特定の種類の指定子は他と組み合わせることはできません。適切な修飾子は 定数 と volatile が含まれています。
型定義の名前は通常の識別子で名前空間を共有します (詳細については 名前空間 を参照してください。したがってプログラムが同じ名前で型定義の名前とローカル スコープ識別子を持つことができます。次に例を示します。
typedef char FlagType;
int main()
{
}
int myproc( int )
{
int FlagType;
}
ローカル スコープ識別子または同じスコープまたは内部スコープの構造体または共用体のメンバーを宣言する場合型定義と同じ名前で宣言する場合型指定子を指定する必要があります。この例ではこの制約を示すものです :
typedef char FlagType;
const FlagType x;
識別子の FlagType の名前構造体のメンバーを再利用するにはまたは共用体のメンバーは型指定する必要があります :
const int FlagType; /* Type specifier required */
示すだけではありません。
const FlagType; /* Incomplete specification */
FlagType が型の一部であるのにかかるため再ない識別子。この宣言は無効な宣言などに設定されます。
int; /* Illegal declaration */
関数ポインターおよび配列型を含む型定義の型を宣言できます。定義に宣言と同じ表示できる限り構造体または共用体の型を定義する前に構造体または共用体型にポインター型定義の名前を宣言できます。
型定義の名前がコードの読みやすさを向上させることができます。signal に次の宣言の 3 つはすべて同じ型型定義の名前を使用せずに1 番目のを正確に指定します。
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 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;
このステートメントは3 台のメンバーを持つ構造体の型として GROUP を宣言します。構造体のタグがclub型定義の名前 ()GROUP 指定されているためまたは構造体の宣言はタグで使用できます。タグを使用して構造体のキーワードを使用し型定義の名前を含む構造体のキーワードを使用できません。
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
型 PG は構造体の型によって定義された GROUP の型へのポインターとして宣言されています。
typedef void DRAWF( int, int );
この例では値を返し2 ビットの整数の引数を受け取る関数の型 DRAWF を示します。これはたとえば宣言
DRAWF box;
宣言と等価です。
void box( int, int );