'struct'랑 'typedef struct'의 차이


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

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

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

  • 2016년 01월 13일에 작성됨

조회수 347


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에만 등록됩니다.

  • 2016년 01월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close