switch_is
typedef struct [ struct-tag ] {
[ switch_is(limited-expr)
[ , field-attr-list ] ] union-type-specifier declarator;
...
}
[ [function-attribute-list] ] type-specifier [pointer-declarator]
function-name(
[ switch_is(limited-expr)
[ , param-attr-list ] ] union-type [declarator]
, ...
);
struct-tag
Specifies an
optional tag for a structure.
limited-expr
Specifies a
C-language expression supported by MIDL. Almost all C-language expressions are
supported. The MIDL compiler supports conditional expressions, logical
expressions, relational expressions, and arithmetic expressions. MIDL does not
allow function invocations in expressions and does not allow pre- and
post-increment and -decrement operators.
field-attr-list
Specifies
zero or more field attributes that apply to a union member. Valid field attributes
include first_is, last_is, length_is, max_is, size_is;
the usage attributes string, ignore, and context_handle;
the pointer attribute ref, unique, or ptr; and for members
that are themselves unions, the union attribute switch_type. Separate
multiple field attributes with commas.
union-type-specifier
Specifies the
union type identifier. An optional storage specification can precede type-specifier.
declarator
and declarator-list
Specifies a
standard C declarator, such as an identifier, pointer declarator, and array
declarator. (Function declarators and bit-field declarations are not allowed in
unions that are transmitted in remote procedure calls. These declarators are
allowed in unions that are not transmitted.) Separate multiple declarators with
commas.
function-attribute-list
Specifies
zero or more attributes that apply to the function. Valid function attributes
are callback, local; the pointer attribute ref, unique,
or ptr; and the usage attributes string, ignore, and context_handle.
type-specifier
Specifies a base_type,
struct, union, enum type, or type identifier. An optional
storage specification can precede type-specifier.
pointer-declarator
Specifies
zero or more pointer declarators. A pointer declarator is the same as the
pointer declarator used in C; it is constructed from the * designator,
modifiers such as far, and the qualifier const.
function-name
Specifies the
name of the remote procedure.
param-attr-list
Specifies
zero or more attributes appropriate for the specified parameter type. Parameter
attributes can take the directional attributes in and out, the
field attributes first_is, last_is, length_is, max_is,
size_is, and switch_type; the pointer attribute ref, unique,
or ptr; and the usage attributes context_handle and string.
The usage attribute ignore cannot be used as a parameter attribute.
Separate multiple attributes with commas.
union-type
Identifies
the union type specifier.
Examples
typedef [switch_type(short)] union
_WILLIE_UNION_TYPE {
[case(24)]
float
fMays;
[case(25)]
double
dMcCovey;
[default]
;
} WILLIE_UNION_TYPE;
typedef struct _WINNER_TYPE {
[switch_is(sUniformNumber)] union WILLIE_UNION_TYPE w;
short
sUniformNumber;
} WINNER_TYPE;
Remarks
The switch_is
attribute specifies the expression or identifier acting as the union
discriminant that selects the union member. The discriminant associated with
the switch_is attribute must be defined at the same logical level as the
union:
When the union is a parameter,
the union discriminant must be another parameter.
When the union is a field of a
structure, the discriminant must be another field of the same structure.
The sequence
in a structure or a function parameter list is not significant. The union can
either precede or follow the discriminant.
The switch_is
attribute can appear as a field attribute or as a parameter attribute.
See Also