Typedef 선언
형식 정의 저장소 클래스로 typedef로 선언이 됩니다.새 여 자가 됩니다.형식 정의 선언을 더 짧게 또는 더 의미 있는 이름을 이미 C에 의해 정의 된 형식 또는 선언 된 형식에 대해 구성할 수 있습니다.Typedef 이름이 변경 될 수 있습니다 구현 세부 사항을 캡슐화 할 수 있습니다.
형식 정의 동일한 방법으로 변수 해석 됩니다 또는 함수 선언 되었지만 선언에 의해 지정 된 형식이 대신 식별자 형식에 대 한 동의어입니다.
구문
declaration:
선언 지정자 init 선언 자 목록 선택**;**선언 지정자:
저장소 클래스 지정자 선언 지정자 선택형식 지정 자가 선언 지정자 선택
형식 한정자 선언 지정자 선택
저장소 클래스 지정자:
typedef형식 지정 자가:
voidchar
short
int
long
float
double
서명
서명 되지 않은
구조체 또는 공용 구조체 지정자
enum 지정자
형식 정의 이름
typedef 이름은:
identifier
참고 형식 정의 종류를 만들지 않습니다.기존 형식에 대 한 동의어 또는 다른 방법으로 지정 될 수도 있습니다 하는 형식에 대 한 이름을 만듭니다.Typedef 이름은 형식 지정자로 사용 하는 경우 특정 형식 지정자로만 결합할 수 있습니다.사용할 수 있는 한정자를 포함 const 및 volatile.
Typedef 이름은 일반 식별자와 이름 공간을 공유 (참조 하십시오 네임 스페이스 에 대 한 더 많은 정보).따라서 프로그램 typedef 이름 및 로컬 범위 식별자가 같은 이름을 가질 수 있습니다.예를 들면 다음과 같습니다.
typedef char FlagType;
int main()
{
}
int 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 이름은 코드 가독성을 높이기 위해 사용할 수 있습니다.다음 선언 중 세 signal 을 먼저 하지 않고 만드는 동일한 유형을 정확 하 게 지정 된 typedef 이름 사용 하는.
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;
이 문은 선언 GROUP 세 가지 멤버를 구조체 형식으로 합니다.구조 태그, 이후 club, 또한 지정 된 typedef 이름이 (GROUP) 또는 구조 태그 선언에 사용할 수 있습니다.Struct 키워드와 태그를 사용 해야 및 struct 키워드는 형식 정의 이름으로 사용할 수 없습니다.
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
형식 PG 에 대 한 포인터 선언 됩니다는 GROUP 구조 형식으로 차례로 정의 된 형식입니다.
typedef void DRAWF( int, int );
이 예제에서는 형식을 제공 DRAWF 값을 반환 하 고 두 개의 int 인수를 갖는 함수에 대 한.예를 들어, 있는 즉, 선언
DRAWF box;
선언에 해당
void box( int, int );