Computer/Software

[C언어] typedef 구조체선언

Detacher 2011. 8. 13. 22:34
구조체는 자료형의 한 종류이다.

보통 구조체는 다음과 같은 방식으로 짤수있다.

struct Pocket {
int a;           
int b;      //a, b는 멤버데이터이며, {}는 멤버데이터들을 묶어준다
};
//구조체 선언 끝에는 ;가 명시된다. 함수 선언의경우 {}의 의미는 메인메모리에서 스택할당이 되지만, 구조체 선언시 {}는 메인메모리에 아무런 영향을 주지않는다. 따라서 구분을 위해 ;가 필요하다.


구조체의 객체생성은 다음과 같다.

struct Pocket {
int a;           
int b;      
};
struct Pocket A1, *pA2;  //c에서는 struct지시어가 필요하지만 c++은 없어도 무방하다. A1은 정적객체, pA2는 포인터객체로 선언

간편하게 이렇게 해도 된다.

struct Pocket {
int a;           
int b;      
}A1, *pA2;

////////////////////////////////////////////////////////////
이제 typedef struct 선언이 왜필요한지 살펴보자.
사실 엄밀히 말하여 C언어에서 편의를 위해 특히 필요하다.

다음 구조체 선언을 보자.

typedef struct Pocekt{
int a;
int b;
}MyPocket, *pMyPocket;
//Pocket은 구조체이름, a,b는 멤버데이터, MyPocket과 *pMyPocket은 선언된 구조체 자료형 Pocket을 각각의 이름으로 재선언된 것 

//위에서 이어져서, 아래 두문장은 같은 의미이다.
struct Pocket A1, *pA2;  //<---1

MyPocket A1;          
pMyPocket pA2;
    //<-------2
//1번 문장과 다르게 struct를 쓰지않고 바로 사용가능하다.



결론적으로, typedef struct의 유용성은 다음과 같다.

1. C언어에서, 구조체 자료형으로 새로운 선언을 할때 struct를 앞에 안붙여도 된다.

2. typedef란 본래 자료형을 다른이름으로 선언, 또한 그 정의를 복사(?)한다는 개념이다. 따라서 이를 이용해 하나의 구조체를 여러 구조체로 선언할수있다.