C언어에서 Typedef 는 자료형을 재정의 할 수 있도록 하는 아주 유용한 키워드입니다.
typedef (자료형이름) (재정의할 자료형 이름) 로 되어있는 아주 쉬운 구조이죠.
사용방법을 간략하게 예를들면 아래와 같습니다.
typedef int INT32; //int를 INT32로 재정의해서 사용할거에요!
INT32 a = 1000; // int a = 1000 이랑 같은 뜻!
사실 위와같은 케이스에 대해 이해하는건 정말 쉽습니다.
그런데 이에 대하여 처음 접하거나 익숙하지 않은 경우 간혹 헷갈리는것들이 있습니다.
typedef void (*fun)(int,int); //함수포인터 자료형!
typedef int (*arr)[10]; //포인터 배열 자료형!
위 두개는 함수포인터의 자료형과 포인터 배열의 자료형입니다.
"어? 구조가 typedef (자료형이름 ) (재정의 자료형 이름) 인데 저건 대체 뭐지?" 라며 처음에는 혼란스러울만한 문법입니다.
이에 대한 일반적인 설명을 보면 이것은 외우거나 익숙해져야 한다는 글들이 있습니다.
사실 저는 무식하게(ㅠ ㅠ) 입문을 저렇게 해서 익숙해진 케이스이긴 한데... 알고보면 단순한 규칙이 있습니다. 이것만 이해하면 포인터배열과 함수포인터 재정의 자료형을 이해하기가 아주 쉽습니다.
"변수명에 typedef 키워드를 사용하면 그 변수명은 자료형이 됩니다."
위에 예시로 든것을 다시 가져와서 예를들어보도록 하겠습니다.
void (*fun)(int,int); // 함수포인터 변수 fun을 선언!
여기에 typedef를 붙이면...
typedef void (*fun)(int,int); //함수포인터 자료형을 만들고 이 이름을 fun으로 정의 할께요.
마찬가지로 포인터 배열 또한
int (*arr)[10]; // int형 포인터 10개를 저장할수 있는 arr이라는 포인터 배열 arr 선언!
typedef int (*arr)[10]; //int형 포인터 10개를 저장할수 있는 포인터배열을 정의한 arr이라는 자료형!
으로 표현 가능합니다.
추가적으로 일반 변수나 포인터 그리고 구조체로도 적용해보면 아래와 같습니다.
int int32 //int32라는 int형 변수
typedef int int32 //int32는 int형 자료형
int* pint32 //pint32라는 int형 포인터 변수
typedef int* pint32 //pint32는 int형 포인터 자료형
struct _a
{
int num1;
int num2;
}a; //struct _a형 변수 a
typedef struct _a
{
int num1;
int num2;
}a; //a는 struct _a형 자료형
'Embedded > Programming language : C' 카테고리의 다른 글
[C] 가변 인수 (1) : 가변 인수 함수의 주소는 어떻게 될까 (0) | 2022.10.28 |
---|---|
[C] 선언한 배열의 index 이상을 접근하면 어떻게 될까? (0) | 2022.10.27 |
[C] 매크로 함수 이해하기 (0) | 2022.10.26 |
[C] 매크로 함수에서 do~while(0)을 쓰는 이유 (0) | 2022.10.26 |
[C] 비트필드 (0) | 2017.04.05 |