C에서 구조체를 정의한다고 가정 해 보겠습니다. 구조체의 인스턴스를 선언하면 앞에 'struct'키워드를 포함시켜야합니다.C에서 'struct'키워드 앞에 struct 인스턴스가 있어야하는 이유는 무엇입니까?
// Define struct
struct Book {
char title[50];
char author[50];
char subject[100];
int book_id;
};
// Instantiate struct
int main()
{
struct Book myBook;
}
내 질문 : 구조체의 인스턴스화 앞에 struct 키워드가 필요한 이유는 무엇입니까? 컴파일러가 'Book'이 구조체라는 점을 감추는 많은 정보가있는 것처럼 보입니다.
나는이 문제를 typedef를 사용하여 해결할 수 있다는 것을 알고 있지만 실제로 컴파일러가 알아야 할 보일러 플레이트 코드처럼 보인다.
C에서 구조체와 공용체는 전역 네임 스페이스와 다른 고유 한 네임 스페이스를가집니다. 구조체 네임 스페이스를 볼 수 있도록'struct'라고 말해야합니다. –
@RaymondChen : 태그 네임 스페이스는 구조체, 공용체 및 열거 형에서 공유됩니다. 예를 들어 동일한 범위에'struct foo'와'union foo'를 둘 다 가질 수는 없습니다. 레이블은'struct'와'union' 멤버처럼 자신의 네임 스페이스를 갖습니다. 다른 모든 식별자 (변수 이름, 함수 이름, 열거 상수 등)는 "일반 식별자"네임 스페이스로 묶입니다. –