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]]
    , ...);

Parámetros

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 .

Comentarios

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.

Ejemplos

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;

Vea también

Tipos base MIDL

devolución de llamada

const

context_handle

Uniones encapsuladas

Enum

first_is

Ignorar

last_is

length_is

Local

max_is

Uniones no encapsuladas

Ptr

Ref

size_is

string

Estructura

switch_type

union

unique