typedef 指定子
typedef 宣言は、スコープ内で、宣言の type-declaration 部分で指定された型のシノニムになる名前を導入します。
typedef type-declaration synonym;
解説
typedef 宣言を使用して、既に言語で定義されている型や、宣言した型に対して、より短い、またはわかりやすい名前を作成できます。 Typedef 名を使用して、変更可能な実装の詳細をカプセル化できます。
class、struct、union、および 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 宣言の使用方法の 1 つは、宣言をより同型でコンパクトにすることです。 次に例を示します。
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;
次の例は、値を返さず、2 つの int 引数を受け取る関数に対する型 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);
}