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