일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Algorithm
- c#
- c# winform
- HTML
- dart 언어
- jupyter
- Python
- C++
- C# delegate
- gitlab
- docker
- Flutter
- 다트 언어
- Unity
- git
- Data Structure
- jupyter lab
- C언어 포인터
- 깃
- 플러터
- 도커
- 구조체
- vim
- 포인터
- github
- c# 윈폼
- c# 추상 클래스
- 유니티
- Houdini
- c언어
- Today
- Total
nomad-programmer
[C] typedef 본문
typedef 는 타입을 정의한다는 의미의 "type define"의 줄임 표현이다. 기존의 자료형 중에 자료형 이름의 길이가 긴 경우 프로그래머가 짧고 간결하게 자료형을 재정의하는 문법이다.
#define과 비슷해 보이지만 #define은 치환 작업을 수행하는 전처리기이고 typedef는 기존 자료형을 다른 이름으로 새롭게 정의하는 기능이다.
기존 자료형을 단순한 형태의 새 자료형으로
typedef 문법이 가장 흔하게 사용되는 경우는 기존 자료형의 이름이 너무 길어서 새로운 자료형으로 재정의해야 할 때이다.
typedef unsigned short int US;
// unsigned short int temp; 라고 선언한 것과 같다.
US temp;
새롭게 정의했다는 의미를 전달하게 위해 새로 정의한 자료형이나 상수에 대한 치환 값을 전체 문자를 모두 대문자로 짓는 것이 일반적이다. 따라서 자료형이 전부 대문자라면 "무언가 새로 정의되거나 치환된 것이구나" 라고 생각하면 된다.
typedef의 장점
1. 복잡해 보이는 문법을 쉽게 표현할 수 있다.
typedef는 일반 변수 형식뿐만 아니라 배열, 포인터와 같은 형식도 재정의할 수 있다.
typedef int ARR_INT[5];
// int temp[5]; 라고 선언한 것과 같다.
ARR_INT temp;
// int (*ptr)[5]; 라고 선언한 것과 같다.
ARR_INT * arr;
arr변수는 포인터 변수다. 그리고 포인터 변수 arr이 가리키는 대상의 크기는 ARR_INT이다. 즉 int[5]이다.
이렇게 이해하기 힘들거나 자료형이 너무 복작하게 되었을 때 typedef를 사용하면 편한 형태로 사용할 수 있다.
2. 자료형의 크기를 쉽게 바꿀 수 있다.
기본 자료형 선언이 소스 코드 전체에서 여러 번 사용되었을 때 이것을 다른 바이트 수를 가진 자료형으로 바꾸려면 하나씩 찾아가서 바꿔줘야 하는 불편한이 생긴다.
만약 typedef 문법으로 새롭게 정의한 변수를 선언하여 사용했다면, typedef 정의 하나만 변경하면 모두 변경할 수 있다.
결론적으로 typedef를 사용하면 데이터의 크기에 변화가 생겼을 때 쉽게 대쳐할 수 있다.
3. 구조체 정의할 때 편하다.
// 구조체 정의
struct People {
char name[15];
int age;
};
// 새로운 이름의 자료형으로 변경
typedef struct People Person;
// 이렇게하면 struct People p1; 이런 선언을 Person p1; 으로 선언할 수 있다. 혹은
// typedef + 구조체 정의
typedef struct People {
char name[15];
int age;
} Person;
// 이런식으로 typedef와 구조체 정의를 합칠 수 있다. 그리고 People이라는 이름은 아래와 같이 없애도 된다.
// 구조체 이름을 뺀 typedef + 구조체 정의
typedef struct {
char name[15];
int age;
} Person;
'Programming > C' 카테고리의 다른 글
[Programming/C] 파일 사용 형식 (0) | 2020.06.16 |
---|---|
[Programming/C] 구조체 멤버 정렬 (Struct Member Alignment) (0) | 2020.06.14 |
[C] 3차원 배열 같은 3차원 포인터의 동적 할당 (0) | 2020.06.13 |
[C] 2차원 배열 같은 2차원 포인터의 동적 할당 (0) | 2020.06.13 |
[C] 동적 할당으로 간단히 구현해본 stack (0) | 2020.06.13 |