1021
The first operand of the
1022
The first operand of the
1023
A postfix expression followed by the
1024 The value is that of the named member, and is an lvalue if the first expression is an lvalue.
1025 If the first expression has qualified type, the result has the so-qualified version of the type of the designated member.
1026
A postfix expression followed by the
1027 The value is that of the named member of the object to which the first expression points, and is an lvalue.80)
1028 If the first expression is a pointer to a qualified type, the result has the so-qualified version of the type of the designated member.
1029 One special guarantee is made in order to simplify the use of unions: if a union contains several structures that share a common initial sequence (see below), and if the union object currently contains one of these structures, it is permitted to inspect the common initial part of any of them anywhere that a declaration of the complete type of the union is visible.
1030 Two structures share a common initial sequence if corresponding members have compatible types (and, for bit-fields, the same widths) for a sequence of one or more initial members.
1031
EXAMPLE 1
If
1032 EXAMPLE 2 In:
struct s { int i; const int ci; };
struct s s;
const struct s cs;
volatile struct s vs;
the various members have the types:
s.i int s.ci const int cs.i const int cs.ci const int vs.i volatile int vs.ci volatile const int
1033
80) If
1034 EXAMPLE 3 The following is a valid fragment:
union {
struct {
int alltypes;
} n;
struct {
int type;
int intnode;
} ni;
struct {
int type;
double doublenode;
} nf;
} u;
u.nf.type = 1;
u.nf.doublenode = 3.14;
/* ... */
if (u.n.alltypes == 1)
if (sin(u.nf.doublenode) == 0.0)
/* ... */
The following is not a valid fragment (because the union type is not
visible within function
struct t1 { int m; };
struct t2 { int m; };
int f(struct t1 *p1, struct t2 *p2)
{
if (p1->m < 0)
p2->m = -p2->m;
return p1->m;
}
int g()
{
union {
struct t1 s1;
struct t2 s2;
} u;
/* ... */
return f(&u.s1, &u.s2);
}
1035 Forward references: address and indirection operators (6.5.3.2), structure and union specifiers (6.7.2.1).
Next
Created at: 2005-06-29 02:18:59
The text from WG14/N1124 is copyright © ISO