공부 스토리/Programming / / 2020. 7. 28. 13:31

[C언어] struct 와 typedef struct의 차이

목차

    반응형

    struct test
    {
        int a;
    }
    
    test testEx01;		// 에러
    
    struct test testEx01;	// OK

    C언어에서는 변수 선언이 가능한 키워드가 있어야 컴파일러가 변수 선언이라고 인식을 하기 때문에, 태그명(test)만을 가지고 변수를 선언할 수 없다.

     

    따라서, 위와 같이 struct만 가지고 구조체를 선언했을 경우에는 구조체 변수를 선언할 때도 앞에 struct를 붙여 이것이 변수 선언이라는 것을 컴파일러에게 명시해주어야 한다.

     

    하지만, 매번 struct를 써주는 일이 귀찮기 때문에(?) typedef를 사용하기도 한다.

     

    typedef struct test
    {
        int a;
    } testStruct;
    
    testStruct testEx02;	// OK

    위 코드에서 testStruct는 구조체 별칭이다. 컴파일러에서는 testStruct == struct test로 인식하게 된다.

     

    이처럼 typedef를 사용하게 되면 struct를 변수 선언마다 써주지 않아도 된다. 

     

    typedef를 사용할 때는 아래와 같이 구조체 태그명(test)을 제외하고 사용할 수도 있다. (이를 익명 구조체라고도 함)

    typedef struct
    {
        int a;
    } testStruct;
    
    testStruct testEx03;	// OK

    하지만 이는 표준이 아니기 때문에 지원하지 않는 컴파일러가 있을 수 있다. 지원해도 warning을 띄울 수도 있다.

     

    따라서 다양한 컴파일러에서 잘 동작하게 만들기 위해서는 태그명까지 함께 써주는 것이 좋다.

    반응형
    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유