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
结构,我注意到我只能通过srcip.S_addr
引用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
答案 0 :(得分:1)
要在问题中声明in_addr
结构,请使用typedef:
IN_ADDR srcip;
或
struct in_addr srcip;
然后您应该可以使用srcip.S_un.S_addr
。
通过执行in_addr srcip
,您可能会声明命名空间中可用的名为in_addr
的其他内容。