Anonymous Union (익명의 유니온) 사용법 질문 - C 프로그램

yeilho의 이미지

아래처럼 구조체가 선언되어 있는 경우에는, 유니온 멤버가 이름이 없습니다. 이런 경우에는 값을 셋팅할 수 있나요?

typedef struct network_info {
    uint16_t sa_family;
    union {
      uint32_t sin_addr;
      uint8_t saddr[4];
      uint32_t sin6_addr[4];
      uint8_t saddr6[16];
    };
} network_info_t;

유니온의 이름이 있는 경우에는 간단하던데, 이름이 없다보니 잘 모르겠네요. 조언 부탁드립니다.

감사합니다.

일호 <><

irondog의 이미지

struct안에서 익명의 struct나 union이 표준인가 모르겠네요. 지원 안되는 컴파일러도 있거든요. 아무튼 사용은 더 쉽습니다.

network_info_t net_info;

net_info.sin_addr = xx;
memset(net_info.saddr6, 0, sizeof(net_info.saddr6));

이런식으로 struct의 멤버 변수처럼 쓰시면 됩니다.
그리고 union으로 묶인 변수들은 메모리 영역을 공유하게 되겠죠..