Atributo switch_is

O atributo [switch_is] especifica a expressão ou o identificador que atua como o discriminador de união que seleciona o membro da união.

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 uma marca opcional para uma estrutura.

limited-expr

Especifica uma expressão de linguagem C compatível com MIDL. Há suporte para quase todas as expressões de linguagem C. O compilador MIDL dá suporte a expressões condicionais, expressões lógicas, expressões relacionais e expressões aritméticas. MIDL não permite invocações de função em expressões e não permite operadores pré e pós-incremento e pré e pós-decremento.

field-attr-list

Especifica zero ou mais atributos de campo que se aplicam a um membro da união. Os atributos de campo válidos incluem [first_is], [last_is], [length_is], [max_is], [size_is]; os atributos de uso [string], [ignore]e [context_handle]; o atributo de ponteiro [ref], [unique]ou [ptr]; e para os próprios sindicatos, o atributo sindical [switch_type]. Separe vários atributos de campo com vírgulas.

union-type-specifier

Especifica o identificador de tipo de união . Uma especificação de armazenamento opcional pode preceder o especificador de tipo.

declarator e declarator-list

Especifica um declarador C padrão, como um identificador, um declarador de ponteiro e um declarador de matriz. (Declaradores de função e declarações de campo de bit não são permitidos em uniões transmitidas em chamadas de procedimento remoto. Esses declaradores são permitidos em uniões que não são transmitidas.) Separe vários declaradores com vírgulas.

function-attribute-list

Especifica zero ou mais atributos que se aplicam à função. Os atributos de função válidos são [retorno de chamada], [local]; o atributo de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [string], [ignore], e [context_handle].

type-specifier

Especifica um tipo base, struct, união, tipo de enumeração ou identificador de tipo. Uma especificação de armazenamento opcional pode preceder o especificador de tipo.

pointer-declarator

Especifica zero ou mais declaradores de ponteiro. Um declarador de ponteiro é o mesmo que o declarador de ponteiro usado em C; ele é construído a partir do designador * , modificadores como , por exemplo, e o qualificador const.

function-name

Especifica o nome do procedimento remoto.

param-attr-list

Especifica zero ou mais atributos apropriados para o tipo de parâmetro especificado. Os atributos de parâmetro podem usar os atributos direcionais [in] e [out], os atributos de campo [first_is], [last_is], [length_is], [max_is], [size_is] e [switch_type]; o atributo de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [context_handle] e [cadeia de caracteres]. O atributo de uso [ignore] não pode ser usado como um atributo de parâmetro. Separe vários atributos com vírgulas.

union-type

Identifica o especificador de tipo de união .

Comentários

O discriminante associado ao atributo [switch_is] deve ser definido no mesmo nível lógico que a união:

  • Quando a união é um parâmetro, o discriminador de união deve ser outro parâmetro.
  • Quando a união é um campo de uma estrutura, o discriminador deve ser outro campo da mesma estrutura.

A sequência em uma estrutura ou uma lista de parâmetros de função não é significativa. A união pode preceder ou seguir o discriminante.

O atributo [switch_is] pode aparecer como um atributo de campo ou como um atributo de parâmetro.

Exemplos

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;

Confira também

Tipos base MIDL

retorno de chamada

const

context_handle

Uniões Encapsuladas

Enum

first_is

Ignorar

last_is

length_is

Local

max_is

Uniões NãoCapsuladas

Ptr

Ref

size_is

string

Struct

switch_type

union

unique