질문 : C ++에서 'struct'와 'typedef struct'의 차이점은 무엇입니까?
C ++ 에서는 다음과 같은 차이점이 있습니까?
struct Foo { ... };
과:
typedef struct { ... } Foo;
답변
C ++에서는 미묘한 차이 만 있습니다. 그것은 차이를 만드는 C로부터의 홀드 오버입니다.
C 언어 표준 ( C89 §3.1.2.3 , C99 §6.2.3 및 C11 §6.2.3 )은 태그 식별자 ( struct
/ union
/ enum
) 및 일반 식별자 ( typedef
)를 포함하여 다양한 범주의 식별자에 대해 별도의 네임 스페이스를 요구합니다. 및 기타 식별자).
방금 말한 경우 :
struct Foo { ... };
Foo x;
Foo
는 태그 네임 스페이스에서만 정의되기 때문에 컴파일러 오류가 발생합니다.
다음과 같이 선언해야합니다.
struct Foo x;
Foo
를 참조하고 싶을 때마다 struct Foo
라고 불러야합니다. 이것은 짜증나게 빠르게 진행되므로 typedef
추가 할 수 있습니다.
struct Foo { ... };
typedef struct Foo Foo;
이제 struct Foo
(태그 네임 스페이스에 있음)와 일반 Foo
(일반 식별자 네임 스페이스에 있음) 모두 동일한 것을 참조하며 struct
키워드 Foo
구성 :
typedef struct Foo { ... } Foo;
typedef
의 약어입니다.
드디어,
typedef struct { ... } Foo;
익명 구조를 선언하고 이에 대한 typedef
를 만듭니다. 따라서이 구성을 사용하면 태그 네임 스페이스에 이름이없고 typedef 네임 스페이스에 이름 만 있습니다. 이것은 또한 앞으로 선언 될 수 없음을 의미합니다. 포워드 선언을하려면 네임 스페이스 태그에 이름을 지정해야합니다 .
C ++에서 모든 struct
/ union
/ enum
/ class
선언은 동일한 이름을 가진 다른 선언에 의해 이름이 숨겨지지 않는 한 암시 적으로 typedef
자세한 내용은 Michael Burr의 답변 을 참조하십시오.
출처 : https://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++ 표준은 초기화되지 않은 bool이 프로그램을 충돌시키는 것을 허용할까? (0) | 2021.06.27 |
---|---|
최신 C ++ 11 / C ++ 14 / C ++ 17 및 향후 C ++ 20에서 열거 형 문자열 (0) | 2021.06.27 |
C ++에서 배열 사용 방법 (0) | 2021.06.25 |
C ++에서 문자열을 토큰화 하는 방법 (0) | 2021.06.23 |
dash를 제외한 문자열에서 영숫자가 아닌 모든 문자를 제거하는 방법 (0) | 2021.06.17 |