ссылаются на переменную в объединении - PullRequest
0 голосов
/ 03 марта 2012
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

1 Ответ

1 голос
/ 03 марта 2012

Чтобы объявить структуру in_addr в вашем вопросе, используйте typedef:

IN_ADDR srcip;

или

struct in_addr srcip;

Тогда вы сможете использовать srcip.S_un.S_addr.

Делая in_addr srcip, вы, вероятно, объявляете что-то еще под названием in_addr, которое доступно в пространстве имен.

...