본문 바로가기
개발/C, C++

typedef 선언

by 피로물든딸기 2021. 5. 2.
반응형

C, C++ 전체 링크

 

typedef를 이용하면 기존에 존재하는 자료형의 이름을 재정의 할 수 있다.

 

예를 들어 unsigned long long int type을 선언한다고 가정하자.

그러면 새로운 변수를 쓸 때마다 매번 "unsigned long long int"를 선언해야 한다.

하지만 typedef로 unsigned long long intull로 재정의하면 한결 편해진다.

#include <stdio.h>

typedef unsigned long long int ull;

int main(void)
{
	ull a = 1ull << 63;
	unsigned long long int b = 1ull << 63;

	printf("%llu\n%llu\n", a, b);

	return 0;
}


C에서 구조체를 선언하면 매번 구조체를 사용할 때마다 struct를 앞에 붙인다.

이것 역시 typedef로 type을 재정의하면 간단하다.

 

blood 구조체는 main에서 struct blood로 변수를 만든다.

하지만 strawberry 구조체는 STRAWBERRY로 이름을 재정의하였기 때문에 STRAWBERRY로 변수를 만들 수 있다.

물론 struct strawberry도 여전히 가능하다.

#include <stdio.h>

struct blood
{
	int a;
	int b;
};

typedef struct strawberry
{
	int c;
	int d;
}STRAWBERRY;

struct STRAW
{
	int e;
	int d;
};

int main(void)
{
	struct blood bd1;
	bd1.a = 1;
	bd1.b = 2;

	/* c++에서는 가능하다. */
	//blood bd2;
	//bd2.a = 3;
	//bd2.b = 4;

	struct strawberry sb1;
	sb1.c = 5;
	sb1.d = 6;

	STRAWBERRY sb2;
	sb2.c = 7;
	sb2.d = 8;
	
	return 0;
}

 

위의 코드에서 blood bd2 부분의 주석을 해제하면 아래와 같이 컴파일 에러가 발생한다.

blood라는 type은 없고 struct blood라는 type이 있기 때문에 발생하는 에러다.


하지만 C++에서는 typedef가 없어도 구조체 이름으로 구조체를 만들 수 있다.

위의 코드를 ideone.com/ 에서 C와 C++ 각각 실행해서 컴파일이 잘 되는지 확인해보자.

반응형

댓글