익명 구조체/공용체는 C 표준의 일부가 아니며 널리 퍼진 GNU 확장이 아닙니다.
예를 들어 일부 컴파일러 (주로 GCC)에서는 관리자 및 작업자 고유 변수에 액세스 할 수 있습니다. company[i].shares
또는 company[i].department
이지만 company[i].age
은 모호하며 컴파일러는 어느 것이 의미하는지 알 수 없습니다. 당신의 접근 방식은이 문제를 해결하는 방법은 두 가지가있는 경우에도 유효 C.
하지 않은
union {
int num;
float num;
} union_number;
을 정의하기 위해 노력하고 비슷합니다.
가) 구조체 (악한 GNU 방법 외부 공유 속성을 이동, 나는 ICC도이 컴파일되지 않는다는 사실)
union employee
{
char key;
struct person {
short int age;
union {
struct manager
{
float shares;
short int level;
};
struct worker
{
short int skill;
short int department;
};
}
};
} company[10];
나에 대해 알고, 그렇게하지 마십시오) 또는 더 깨끗하고 표준화 된 방법은 구조체 이름을 지정합니다 :
union employee
{
char key;
struct manager
{
short int age;
float shares;
short int level;
} manager;
struct worker
{
short int age;
short int skill;
short int department;
} worker;
} company[10];
이 경우 당신은 그래서 company[i].manager.age
, company[i].worker.skill
과를 통해 구조체의 요소에 액세스 할 수 있습니다.
런타임에 노동 조합에 키, 관리자 또는 작업자가 포함되어 있는지 테스트 할 수있는 방법이 없음에 유의하십시오. 그것은 미리 알려 져야합니다.
또 다른 한가지 : 이것이 의도 된 것인지 확신 할 수 없지만 선언에서 관리자 나 작업자와 함께 키를 저장할 수 없습니다. 유니온에는 키, 관리자 또는 작업자 중 하나만이 포함되어 있습니다.
+1'union' 키의 사용법에 대한 관찰은 훌륭합니다! 'union' 안에서'worker'와'manager'에'struct' 태그를 줄 필요는 없습니다. – dasblinkenlight
아, 이제 내가 그곳에서 무엇을했는지 깨닫는다. 나는 노조를 사용하는 것에 대해 완전히 놓쳤다. – amiregelz