07-24-2023, 10:15 AM
here is very simplified code of problem I have:
<pre>
enum node_type {
t_int, t_double
};
struct int_node {
int value;
};
struct double_node {
double value;
};
struct node {
enum node_type type;
<b>union {
struct int_node int_n;
struct double_node double_n;
};</b>
};
int main(void) {
struct int_node i;
i.value = 10;
struct node n;
n.type = t_int;
n.<b>int_n</b> = i;
return 0;
}
</pre>
And what I don't undestand is this:
<pre>
$ 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’
</pre>
Using `GCC` without `-std` option compiles code above without any problems (and the similar code is working pretty well), but it seems that `c99` does not permit this technique. Why is it so and is it possible to make is `c99` (or `c89`, `c90`) compatible? Thanks.
<pre>
enum node_type {
t_int, t_double
};
struct int_node {
int value;
};
struct double_node {
double value;
};
struct node {
enum node_type type;
<b>union {
struct int_node int_n;
struct double_node double_n;
};</b>
};
int main(void) {
struct int_node i;
i.value = 10;
struct node n;
n.type = t_int;
n.<b>int_n</b> = i;
return 0;
}
</pre>
And what I don't undestand is this:
<pre>
$ 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’
</pre>
Using `GCC` without `-std` option compiles code above without any problems (and the similar code is working pretty well), but it seems that `c99` does not permit this technique. Why is it so and is it possible to make is `c99` (or `c89`, `c90`) compatible? Thanks.