프로그래밍 언어/C++

C ++에서 'struct'와 'typedef struct'의 차이점

Rateye 2021. 6. 26. 13:40
728x90
반응형

 

질문 : C ++에서 'struct'와 'typedef struct'의 차이점은 무엇입니까?

C ++ 에서는 다음과 같은 차이점이 있습니까?

struct Foo { ... };

과:

typedef struct { ... } Foo;
답변

C ++에서는 미묘한 차이 만 있습니다. 그것은 차이를 만드는 C로부터의 홀드 오버입니다.

C 언어 표준 ( C89 §3.1.2.3 , C99 §6.2.3C11 §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
728x90
반응형