문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
Visual Studio 2017을 사용하는 것이 좋습니다.

형식 정의 지정자

typedef 선언은 범위 내에서 선언의 type-declaration 부분에서 지정한 형식의 동의어가 되는 이름을 소개합니다.

typedef type-declaration synonym;

Typedef 선언을 이용하여 언어에 의해 이미 정의된 형식 혹은 이미 선언한 형식에 대해 보다 짧거나 보다 의미 있는 이름을 구성할 수 있습니다. typedef 이름을 사용하면 변경될 수 있는 구현 정보를 캡슐화할 수 있습니다.

class, struct, unionenum 선언과 반대로, 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;

이 예제에서는 어떠한 값도 반환하지 않고 두 개의 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);
}
10   0.990000
표시: