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)] 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
encapsulated_union, non-encapsulated_union, switch_type, union