'struct'랑 'typedef struct'의 차이

C++에서 이 둘은 어떤 차이가 있나요?

  • struct Foo { ... };
  • typedef struct { ... } Foo;

대부분 2번째 방법은 쓰던데 왜 그런거죠?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    C++struct/union/enum/class 는 내부적으로 전부 typedef되어 있습니다. 그래서 C++에서는 두 방법은 별로 차이가 없습니다.

    C는 그렇지 않기 때문에 두 방법이 차이가 있지요.

    C의 type엔 다음의 2개 namespace가 있다는 걸 먼저 알아두세요. 이 둘은 서로 다른 namespace이기 때문에 중복되는 이름이 있어도 충돌이 생기지 않습니다.

    • tag name - struct/union/enum에 해당
    • typedef name

    다음 코드에서는 Footag namespace에만 정의되어 있기 때문에 x1은 컴파일할 수 없습니다.

    struct Foo { ... };
    Foo x1; //컴파일 에러
    struct Foo x2; // 컴파일 가능
    

    근데 Foo를 써야 할 때마다 struct Foo를 쓰는 건 엄청 귀찮은 일입니다. 그래서typedef 키워드를 써서 typedef namespaceFoo를 넣어줍니다.

    struct Foo { ... };
    typedef struct Foo Foo;
    
    //혹은 위의 코드를 줄여서
    typedef struct Foo { ... } Foo;
    

    typedef를 추가하면서 struct Foo(tag namespace)와 Foo(typedef namespace)가 같아졌습니다. 이제부터는 struct키워드를 앞에 붙이지 않아도 돼지요

    typedef struct { ... } Foo; 는 이름이 없는 구조체에 typedef를 만들어줍니다. 이렇게 쓰면 tag namespace에는 등록되지 않고 typedef namespace에만 등록됩니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.