C언어 typedef 문에 대해서 의견을 여쩌봅니다. ㅎ
글쓴이: nice7285 / 작성시간: 금, 2013/12/20 - 7:46오후
안녕하세요. ㅎㅎ
typedef문을 볼때마다 궁금(?) 또는 의아하다고 생각하는 부분이 있어요.
아래와 같은 구문이 있을때,
typedef struct tagStack {
int array[STACK_MAX];
int top;
int bottom;
} STACK;
tagStack라는 구조체를 typedef문으로 STACK 이라는 형태로 정의를 하고 있는데요..
tagStack이라고 구조체 명을 정의해 주었는데, typedef를 통해서 STACK으로 또 다시 정의하는 이유가 무엇일까요?
struct Stack {
int array[STACK_MAX];
int top;
int bottom;
};
이렇게 정의하는게 더 낫지 않은가요??
Forums:
typedef가 없으면 타입 이름을 적어줄 때에
typedef가 없으면 타입 이름을 적어줄 때에 struct Stack 이라고 적어주어야 합니다. 불편하지요.
저는 이렇게 이해 했습니다.
예의 코드를 볼때
typedef [struct tagStack { ... }] STACK;
[] 안의 내용을 STACK으로 정의하여
STACK qna; 가 -> tagStack qna 로 변환 한다고 생각합니다.
저도 이게 참 이해안됬었는데
가장 직관적으로 잘 이해되게 말씀해주셨네요.
고맙습니다.
- 실력없는 자존심만큼 비참한것은 없다.
C에서의 typedef
1. tag 테이블
C에서 struct, union, enum 키워드를 이용해 사용자 정의 형식(User Defined Type: 이하 UDT)을 만들면,
그 이름은 바로 형식이 되는 것이 아니라 태그(tag)가 되어 tag 테이블에 들어갑니다.
태그는 형식이 아니기 때문에 다음과 같은 구문도 가능합니다.
이 말은 아직 data는 int, char와 같은, '형식'이 아니라는 뜻입니다.
반드시 앞에 struct, union, enum을 붙여주어야 형식으로써 작용할 수 있게 되지요.
즉 현재 상황은 다음과 같습니다.
즉 data 자체를 형식으로 사용하지는 못하고 항상 앞에 struct 키워드를 붙여주어야 하니 번거롭죠. 그런 이유입니다.
2. 참고: typedef를 이용하여 형식으로 재정의
typedef는 다음과 같이 사용한다고 알려져있습니다.
그런데 사실, typedef 뒤에 들어가는 구문은 변수의 선언과 완전히 동일합니다.
helloc_님께서 typedef typeA typeB; 부분의 것과 같은 설명을 해주셨기에 덧붙였습니다.
저는 이렇게 생각했습니다.
댓글 달기