typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
in_addr srcip
простая in_addr
структура, я заметил, что могу ссылаться на S_addr только по srcip.S_addr
, а srcip.S_un.S_addr
не работает. Я сделал тест по этому поводу.
struct test_struct {
union {
int m;
int n;
}test;
};
test_struct x;
x.test.m = 1;
скомпилировать успешно, но когда я изменяю x.test.m = 1
на x.m = 1
, компиляция не удалась. почему эти два похожих условия не соответствуют друг другу?
srcip.S_addr
успех, srcip.S_un.S_addr
сбой
x.test.m
успех, но x.m
не удалось, совершенно другой!
ИСПОЛЬЗОВАНИЕ VS2008 и Win7