'struct'랑 'typedef struct'의 차이
조회수 9863회
1 답변
-
C++
의struct
/union
/enum
/class
는 내부적으로 전부typedef
되어 있습니다. 그래서 C++에서는 두 방법은 별로 차이가 없습니다.C
는 그렇지 않기 때문에 두 방법이 차이가 있지요.C
의 type엔 다음의 2개namespace
가 있다는 걸 먼저 알아두세요. 이 둘은 서로 다른 namespace이기 때문에 중복되는 이름이 있어도 충돌이 생기지 않습니다.tag name
-struct
/union
/enum
에 해당typedef name
다음 코드에서는
Foo
가tag namespace
에만 정의되어 있기 때문에 x1은 컴파일할 수 없습니다.struct Foo { ... }; Foo x1; //컴파일 에러 struct Foo x2; // 컴파일 가능
근데
Foo
를 써야 할 때마다struct Foo
를 쓰는 건 엄청 귀찮은 일입니다. 그래서typedef
키워드를 써서typedef namespace
에Foo
를 넣어줍니다.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
에만 등록됩니다.
댓글 입력