組合

2012-03-03 4 views
0
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 doesntの仕事できることに気づきました。私はこれについてのテストをしました。組合

struct test_struct { 
     union { 
      int m; 
      int n; 
     }test; 
    }; 
    test_struct x; 
    x.test.m = 1; 

successfulyコンパイルが、私はx.m = 1x.test.m = 1を変更すると、失敗したコンパイルします。なぜそれらの2つの同様の条件はお互いに一致しませんか?

srcip.S_addr成功、srcip.S_un.S_addr

x.test.m成功を失敗したが、x.mは完全に異なる、失敗しました!そして、あなたがsrcip.S_un.S_addrを使用することができるはず

IN_ADDR srcip; 

または

struct in_addr srcip; 

:どちらか、あなたの質問にin_addr構造体を宣言typedefのを使用するにはVS2008とwin7の

答えて

1

を使用した

in_addr srcipを実行すると、おそらくネームスペースで利用可能なin_addrという名前が宣言されている可能性があります。

+1

+1:よく目に付きます! –