Анонимное объединение в структуре не в c99?

вот очень упрощенный код проблемы, которую я имею:

enum node_type {
    t_int, t_double
};

struct int_node {
    int value;
};

struct double_node {
    double value;
};

struct node {
    enum node_type type;
    union {
        struct int_node int_n;
        struct double_node double_n;
    };
};

int main(void) {
    struct int_node i;
    i.value = 10;
    struct node n;
    n.type = t_int;
    n.int_n = i;
    return 0;
}

И что я не, undestand - это:

$ cc us.c 
$ cc -std=c99 us.c 
us.c:18:4: warning: declaration does not declare anything
us.c: In function ‘main’:
us.c:26:4: error: ‘struct node’ has no member named ‘int_n’

Используя GCC без -std код компиляций опции выше без любых проблем (и подобный код работает вполне прилично), но это кажется этим c99 не разрешает эту технику. То, почему это так, и действительно ли возможно сделать, c99 (или c89, c90) совместимый?Спасибо.

49
задан timrau 18 August 2012 в 13:55
поделиться