次の方法で共有


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);
}
  

参照

関連項目

C++ キーワード

その他の技術情報

C++ Type Names