switch_is (attribut)

L’attribut [switch_is] spécifie l’expression ou l’identificateur agissant en tant que discriminant d’union qui sélectionne le membre de l’union.

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

Paramètres

struct-tag

Spécifie une balise facultative pour une structure.

limited-expr

Spécifie une expression en langage C prise en charge par MIDL. Presque toutes les expressions en langage C sont prises en charge. Le compilateur MIDL prend en charge les expressions conditionnelles, les expressions logiques, les expressions relationnelles et les expressions arithmétiques. MIDL n’autorise pas les appels de fonction dans les expressions et n’autorise pas les opérateurs de pré-incrémentation et de post-incrémentation et de pré-décrémentation et post-décrémentation.

field-attr-list

Spécifie un ou plusieurs attributs de champ qui s’appliquent à un membre de l’union. Les attributs de champ valides incluent [first_is],[last_is], [length_is], [max_is], [size_is] ; les attributs d’utilisation [string], [ignore] et [context_handle]; l’attribut pointeur [ref], [unique] ou [ptr]; et pour les membres qui sont eux-mêmes des syndicats, l’attribut d’union [switch_type]. Séparez plusieurs attributs de champ par des virgules.

union-type-specifier

Spécifie l’identificateur de type d’union . Une spécification de stockage facultative peut précéder le spécificateur de type.

declarator et declarator-list

Spécifie un déclarateur C standard, tel qu’un identificateur, un déclarateur de pointeur et un déclarateur de tableau. (Les déclarateurs de fonction et les déclarations de champ binaire ne sont pas autorisés dans les unions transmises dans les appels de procédure distante. Ces déclarateurs sont autorisés dans les unions qui ne sont pas transmises.) Séparez plusieurs déclarateurs par des virgules.

function-attribute-list

Spécifie zéro ou plusieurs attributs qui s’appliquent à la fonction. Les attributs de fonction valides sont [rappel], [local]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [string], [ignore] et [context_handle].

spécificateur de type

Spécifie un type de base, un struct, une union, un type d’énumération ou un identificateur de type. Une spécification de stockage facultative peut précéder le spécificateur de type.

pointeur-déclarateur

Spécifie zéro ou plusieurs déclarateurs de pointeur. Un déclarateur de pointeur est identique au déclarateur de pointeur utilisé dans C ; il est construit à partir de l’indicateur *, des modificateurs tels que la distance et du qualificateur const.

nom de la fonction

Spécifie le nom de la procédure distante.

param-attr-list

Spécifie zéro ou plusieurs attributs appropriés pour le type de paramètre spécifié. Les attributs de paramètre peuvent prendre les attributs directionnels [in] et [out], les attributs de champ [first_is], [last_is], [length_is], [max_is], [size_is] et [switch_type]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [context_handle] et [string]. L’attribut d’utilisation [ignore] ne peut pas être utilisé comme attribut de paramètre. Séparez plusieurs attributs par des virgules.

union-type

Identifie le spécificateur de type d’union .

Notes

Le discriminant associé à l’attribut [switch_is] doit être défini au même niveau logique que l’union :

  • Lorsque l’union est un paramètre, le discriminant d’union doit être un autre paramètre.
  • Lorsque l’union est un champ d’une structure, le discriminant doit être un autre champ de la même structure.

La séquence d’une structure ou d’une liste de paramètres de fonction n’est pas significative. L’union peut précéder ou suivre le discriminant.

L’attribut [switch_is] peut apparaître sous la forme d’un attribut de champ ou d’un attribut de paramètre.

Exemples

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;

Voir aussi

MIDL Base Types

rappel

const

context_handle

Unions encapsulées

Enum

first_is

Ignorer

last_is

length_is

Local

max_is

Unions non encapsulées

Ptr

Ref

size_is

String

Struct

switch_type

Union

Unique