switch_is (atributo)
El atributo [switch_is] especifica la expresión o identificador que actúa como discriminante de unión que selecciona el miembro de unión.
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
-
Especifica una etiqueta opcional para una estructura.
-
limited-expr
-
Especifica una expresión de lenguaje C compatible con MIDL. Se admiten casi todas las expresiones del lenguaje C. El compilador MIDL admite expresiones condicionales, expresiones lógicas, expresiones relacionales y expresiones aritméticas. MIDL no permite invocaciones de función en expresiones y no permite operadores previos y posteriores al incremento y posteriores a la decremento.
-
field-attr-list
-
Especifica cero o más atributos de campo que se aplican a un miembro de unión. Los atributos de campo válidos incluyen [first_is], [last_is], [length_is], [max_is], [size_is]; los atributos de uso [string], [ignore]y [context_handle]; el atributo de puntero [ref], [unique], o [ptr]; y para los miembros que son propias uniones, el atributo union [switch_type]. Separe varios atributos de campo con comas.
-
union-type-specifier
-
Especifica el identificador de tipo de unión . Una especificación de almacenamiento opcional puede preceder al especificador de tipos.
-
declarator y declarator-list
-
Especifica un declarador C estándar, como un identificador, un declarador de puntero y un declarador de matriz. (Los declaradores de función y las declaraciones de campo de bits no se permiten en uniones que se transmiten en llamadas a procedimiento remoto. Estos declaradores se permiten en uniones que no se transmiten). Separe varios declaradores con comas.
-
function-attribute-list
-
Especifica cero o más atributos que se aplican a la función. Los atributos de función válidos son [devolución de llamada], [local]; el atributo de puntero [ref], [unique], o [ptr]; y los atributos de uso [string], [ignore]y [context_handle].
-
type-specifier
-
Especifica un tipo base, una estructura, una unión, un tipo de enumeración o un identificador de tipo. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.
-
pointer-declarator
-
Especifica cero o más declaradores de puntero. Un declarador de puntero es el mismo que el declarador de puntero utilizado en C; se construye a partir del designador * , modificadores como far y el calificador const.
-
function-name
-
Especifica el nombre del procedimiento remoto.
-
param-attr-list
-
Especifica cero o más atributos adecuados para el tipo de parámetro especificado. Los atributos de parámetro pueden tomar los atributos direccionales [in] y [out], los atributos de campo [first_is], [last_is], [length_is], [max_is], [size_is]y [switch_type]; el atributo de puntero [ref], [unique], o [ptr]; y los atributos de uso [context_handle] y [string]. El atributo de uso [ignore] no se puede usar como atributo de parámetro. Separe varios atributos con comas.
-
tipo de unión
-
Identifica el especificador de tipo de unión .
El discriminante asociado al atributo [switch_is] debe definirse en el mismo nivel lógico que la unión:
- Cuando la unión es un parámetro, el discriminante de unión debe ser otro parámetro.
- Cuando la unión es un campo de una estructura, el discriminante debe ser otro campo de la misma estructura.
La secuencia de una estructura o una lista de parámetros de función no es significativa. La unión puede preceder o seguir al discriminante.
El atributo [switch_is] puede aparecer como un atributo de campo o como atributo de parámetro.
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;