typedef과 구조체

프로그래밍/C 2019.05.23 댓글 Plorence

typedef

typedef 선언은 기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것입니다.

예를 들면

typedef int INT

라고 선언을 하게 되면, 자료형의 이름 int에 INT라는 이름을 추가로 붙여줍니다.

결국엔

int num1;
INT num2;

동일한 자료형을 선언하게 됩니다.

typedef 선언에 있어서 새로운 이름의 부여는 가장 마지막에 등장하는 단어를 중심으로 이뤄집니다.

즉 typedef name1 name2 name3라고 선언하면 name3가 'name1 name2'에 부여된 새로운 이름이 된 것입니다.

이때 name1, name2는 어떠한 의미가 있어야 합니다.(안 그러면 컴파일 에러가 발생함.)

 

당연한 거지만, typedef의 유효 범위 내에서만 사용이 가능합니다.

#include <stdio.h>

void F() {
	typedef int INT;
	INT N = 0;
}
int main(void) {
	INT A = 0; //컴파일 에러
}

typedef과 구조체

typedef선언은 구조체도 가능합니다.

#include <stdio.h>
struct point
{
       int xpos;
       int ypos;
};
typedef struct point Point;
int main(void) {
       Point pos;
}

구조체의 정의와 typedef의 선언을 한데 묶을 수도 있고, 또 이렇게 선언하는 것이 보다 일반적입니다.

#include <stdio.h>
typedef struct point
{
    int xpos;
    int ypos;
    struct person * ptr;
} POINT; //이렇게 정의와 선언을 따로하는경우가 일반적이다.
struct person
{
    int aa;
};
typedef struct person PERSON; //이렇게도 가능함
int main(void) {
    
}

위에 같은 예제입니다. 보통 위쪽 구조체 방식이 일반적입니다.

#include <stdio.h>
typedef struct
{
    int xpos;
    int ypos;
} POINT; //이렇게 정의와 선언을 따로하는경우가 일반적이다
int main(void) {
    
}

위에 예제는 typedef struct 동시에 선언해버리면 구조체 이름이 별 의미를 가지 않게 됩니다.

위와 같은 방법으로 선언하면 반드시 POINT로만 선언이 가능하며 struct Name 같은 방법으로는 불가능합니다.

 

typedef은 이름이 너무 길어지면 간단하게 줄일 수 있으니 유용하게 사용되는 편입니다.

 

댓글