무명 구조체(unnamed struct)에 대해 타입 정의와 포인터타입 정의를 한 번에 한 것입니다.
원래는 구조체 정의시 아래와 같이 구조체이름(예: tag_point)을 주어 정의하고
typedef로 타입 정의할 때 그 이름을 이용해서 정의할 수 있지만,
이 경우 결국 쓰지도 않을 tag_point라는 구조체 이름을 굳이 만들어내야 하므로
타자 치기도 귀찮고 코드도 번거롭게 보입니다.
struct tag_point {double x,y;}; /* named struct인 struct tag_point 정의 */
typedef struct tag_point point_t; /* 구조체에 대해 point_t 타입 정의 */
typedef struct tag_point *point; /* 구조체의 포인터에 대해 point 타입 정의 */
좀 줄여서 아래와 같이 두 개의 typedef를 한 번에 할 수도 있겠죠.
struct tag_point {double x,y;}; /* named struct인 struct tag_point 정의 */
typedef struct tag_point point_t, *point; /* 구조체 타입과 포인터 타입 한번에 정의 */
구조체 정의와 typedef를 합치면 아래와 같이 될 것입니다.
/* named struct인 struct tag_point 정의. 동시에 그 타입과 포인터 타입도 정의 */
typedef struct tag_point {double x,y;} point_t, *point;
여기서 군더더기일수 있는 구조체 이름(tag_point)을 없애면, 질문하신 정의가 되는 것이죠.
/* unnamed struct 타입과 그 포인터 타입을 정의 */
typedef struct {double x,y;} point_t, *point;
앞에 이미 예가 나왔지만, typedef에는 타입 이름을 여러 개 주어도 됩니다.
아래 정의는 동일한 구조체에 대해 point_t와 dot_t 타입을 정의하고
동시에 각각의 포인터 타입인 point와 dot까지 정의한 것입니다.
무명 구조체(unnamed struct)에 대해 타입
무명 구조체(unnamed struct)에 대해 타입 정의와 포인터타입 정의를 한 번에 한 것입니다.
원래는 구조체 정의시 아래와 같이 구조체이름(예: tag_point)을 주어 정의하고
typedef로 타입 정의할 때 그 이름을 이용해서 정의할 수 있지만,
이 경우 결국 쓰지도 않을 tag_point라는 구조체 이름을 굳이 만들어내야 하므로
타자 치기도 귀찮고 코드도 번거롭게 보입니다.
좀 줄여서 아래와 같이 두 개의 typedef를 한 번에 할 수도 있겠죠.
구조체 정의와 typedef를 합치면 아래와 같이 될 것입니다.
여기서 군더더기일수 있는 구조체 이름(tag_point)을 없애면, 질문하신 정의가 되는 것이죠.
앞에 이미 예가 나왔지만, typedef에는 타입 이름을 여러 개 주어도 됩니다.
아래 정의는 동일한 구조체에 대해 point_t와 dot_t 타입을 정의하고
동시에 각각의 포인터 타입인 point와 dot까지 정의한 것입니다.
아래와 같이 두 타입간 혼용도 가능하네요. (gcc-4.4에서 해봄)
typedef는 변수 선언문에 붙이면 변수 이름으로
typedef는 변수 선언문에 붙이면 변수 이름으로 타입을 정의해 줍니다. 아주 간단하죠.
따라서, 변수 여러개를 한꺼번에 선언하듯이, 타입도 한꺼번에 여러개를 선언할 수 있습니다.
예를 들어, 다음은 변수 a와 b를 선언하는 코드입니다.
int a, b;
여기 맨 앞에 typedef 키워드를 붙이면, 변수 대신에 타입을 선언해 줍니다.
typedef int a, b;
타입 a와 b를 선언하죠.
struct {double x,y;} point_t,*point;
이것은 변수 point_t와 포인터 변수 point를 선언합니다.
typedef struct {double x,y;} point_t,*point;
이것은 타입 point_t와 point를 선언해 줍니다.
댓글 달기