C & C++

C언어 구조체 struct 없이 선언 : typedef

jimmy_AI 2021. 12. 17. 12:58
반응형

C언어 구조체 typedef 이용 선언 방법

이번 글에서는 C언어에서 구조체 선언 시 struct를 앞에 붙이지 않고도

편리하게 사용할 수 있는 typedef를 이용한 선언 방법에 대해서

살펴보도록 하겠습니다.

 

구조체 선언 단계에서 struct를 앞에 붙이지 않는다는 것

다음과 같이 편리하게 선언이 가능하다는 것을 의미합니다.

만일 여러개의 같은 구조체를 선언하는 경우에는

아래쪽의 선언 방식이 더 편리할 것으로 예측됩니다.

 

아래의 선언 방식을 적용하기 위해서는 typedef struct를 이용해서

구조체 양식을 정해주면 되는데요.

아래와 같은 양식으로 구조체를 정의해주시면 됩니다.

#include <stdio.h>

int main(){

typedef struct _Book { // 구조체 자체의 변수 이름은 _Book
    // 구조체 멤버 정의(문자열, 정수, 실수 등...)
    char title[30];        
    int price;            
    char author[25];
    int sales;
} Book ; // 앞으로 Book이라는 이름으로 사용(별칭) -> 필수부분

}

맨 앞 부분에 struct 앞에 typedef가 적힌 것 말고는 특이사항은 없어보입니다.

다만, typedef를 사용할 경우는 일반 struct와는 다르게

맨 아래 부분이 변수 선언이 아닌 별칭 지정의 기능에 해당하고,

이 별칭 지정 부분이 반드시 들어가야 함에 유의해주세요.

 

예를 들어, 아래와 같이 별칭을 지정해주지 않고는 사용이 불가능합니다.

typedef struct _Book {
    char title[30];        
    int price;            
    char author[25];
    int sales;
} ; // 오류 발생(별칭 없으면 컴파일 에러)

 

 

 

 

typedef 선언 구조체 선언 및 멤버 변수 접근

typedef를 이용한 선언 방식에서도 멤버 변수에 접근하는 방식은

일반 struct를 이용하여 구조체를 정의한 경우와 크게 다르지는 않습니다.

문자열 자료형을 할당할때는 strcpy 함수 등을 사용해서 간접적으로

할당해야한다는 점에 유의해주세요.

객체이름.멤버변수이름 형태로 값 할당 및 접근을 해주시면 됩니다.

반응형
#include <stdio.h>
#include <string.h>

int main(){

typedef struct _Book { // 구조체 자체의 변수 이름은 _Book
    // 구조체 멤버 정의(문자열, 정수, 실수 등...)
    char title[30];        
    int price;            
    char author[25];
    int sales;
} Book ; // 앞으로 Book이라는 이름으로 사용(별칭)

// struct를 붙이지 않고 선언
Book romeo_juliet;

// 구조체 멤버 값 할당(string 자료 주의)
// romeo_juliet.title = "Romeo and Juliet" 식으로는 불가능
strcpy(romeo_juliet.title, "Romeo and Juliet");
romeo_juliet.price = 13000;
strcpy(romeo_juliet.author, "Shakespeare");
romeo_juliet.sales = 10000000;

// 구조체 멤버 값 접근도 동일
printf("title : %s\n", romeo_juliet.title);
printf("price : %d\n", romeo_juliet.price);
}

 

 

 

typedef 익명 구조체

typedef를 이용한 구조체 정의 방식에서는 앞에서 별칭이 반드시 포함되어야한다고

언급한 적이 있습니다.

 

대신, 이 경우에는 구조체의 본 이름은 생략되고 별칭만 있는 익명 구조체 형태로도

사용이 가능하다는 것을 알아두시면 유용합니다.

 

익명 구조체는 아래와 같은 방식으로 사용해주시면 됩니다.

typedef struct { // 구조체 자체의 변수 이름 생략(익명 구조체)
    char title[30];        
    int price;            
    char author[25];
    int sales;
} Book ; // 별칭만 사용하여 정의

typedef struct 뒤에 아무 이름도 붙지 않고 구조체가 정의된 것을 확인할 수 있습니다.

위와 같이 사용하더라도 구조체 사용 및 멤버변수 접근 과정에는 전혀 지장이 없습니다.