attribut Union
Le mot clé Union apparaît dans les fonctions qui se rapportent aux unions discriminées.
/* Encapsulated union*/
typedef [[ [type-attribute-list] ]] union [[ struct-name ]] switch (switch-type switch-name) [[ union-name ]]
{
C-style-case-list
[[ [ field-attribute-list <> ] ]] type-specifier <> declarator-list <>;
...
}
/* Non-encapsulated union*/
typedef [switch_type(switch-type) [[ , type-attr-list ]] ] union [[ tag ]]
{
[ case ( limited-expr-list) ]
[[ [ field-attribute-list ] ]] type-specifier declarator-list;
[[ [ default ]
[[ [ field-attribute-list ] ]] type-specifier declarator-list;
]]
}
Paramètres
-
type-attribut-List
-
Spécifie zéro, un ou plusieurs attributs qui s’appliquent au type d’Union. Les attributs de type valides incluent [ handle ] , [ transmettre _ en tant que ] ; attribut de pointeur [ unique ] ou [ ptr ] ; et les attributs d’utilisation [ _ handle de contexte ] et [ Ignorer ] . Les unions encapsulées peuvent également avoir l' [ ] attribut de type de pointeur Ref. Séparez plusieurs attributs par des virgules.
-
nom du struct
-
Spécifie une balise facultative qui nomme la structure générée par le compilateur MIDL.
-
type de commutateur
-
Spécifie un type int, char, enum ou un identificateur qui correspond à l’un de ces types.
-
nom du commutateur
-
Spécifie le nom de la variable de type switch-type qui agit en tant que discriminante d’Union.
-
nom d’Union
-
Spécifie un identificateur facultatif qui nomme l’Union dans la structure, générée par le compilateur MIDL, qui contient l’Union et le discriminante.
-
C-style-case-liste
-
Liste de «case const-expr : »
-
Limited-expression-List
-
Spécifie une ou plusieurs expressions en langage C. 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 d’incrémentation et de décrémentation. Les expressions individuelles de la liste doivent être séparées par une virgule.
-
Field-attribute-List
-
Spécifie zéro, un ou plusieurs attributs de champ qui s’appliquent au membre Union. Les attributs de champ valides sont [ First _is, ] [ Last _ is, ] [ Length _ is ] , [ Max _ is ] , [ size _ is ] ; the usage Attributes [ String ] , [ ignore ] et [ Context _ handle ] ; l’attribut de pointeur [ unique ] ou [ ptr ] ; et, pour les membres qui sont des unions non encapsulées, le [ _ type de commutateurd’attribut Union ] . Les unions sans encapsulées peuvent également utiliser l’attribut de champ de pointeur de [ référence ] . Séparez plusieurs attributs de champ par des virgules.
-
spécificateur de type
-
Spécifie un type de base, un struct, une Union, un type enum ou un identificateur de type. Une spécification de stockage facultative peut précéder le type-specifier.
-
déclarateur-liste
-
Un ou plusieurs déclarateurs C standard, tels que les identificateurs, les déclarateurs de pointeurs et les déclarateurs de tableau. (Les déclarateurs de fonction et les déclarations de champ de bits ne sont pas autorisés dans les unions transmises dans les appels de procédure distante. Sauf quand vous utilisez le commutateur de compilateur MIDL /OSF, ces déclarateurs sont autorisés dans les unions qui ne sont pas transmises. Séparez plusieurs déclarateurs par des virgules.
-
étiquette
-
Spécifie une balise facultative.
Notes
MIDL prend en charge deux types d’unions discriminées : les unions encapsulées et les unions qui ne sont pas encapsulées. L’Union encapsulée est compatible avec les implémentations précédentes de RPC (NCA version 1). L’Union non encapsulée élimine certaines des restrictions de l’Union encapsulée et fournit un discriminante plus visible que l’Union encapsulée.
L’Union encapsulée est identifiée par le mot clé switch et l’absence d’autres mots clés liés à l’Union.
L’Union non encapsulée, également appelée « Union », est identifiée par la présence du [ commutateur _ ] et les [ Mots clés de _ type de commutateur ] , qui identifient le discriminante et son type.
Quand vous utilisez [ dans, les ] unions out, sachez que la modification de la valeur du commutateur d’Union au cours de l’appel peut faire en sorte que l’appel distant se comporte différemment d’un appel local. Au retour, les stubs copient le paramètre [ in, out ] dans la mémoire déjà présente sur le client. Lorsque la procédure distante modifie la valeur du commutateur d’Union et modifie donc la taille de l’objet de données, les stubs peuvent remplacer la mémoire valide par la valeur [ out ] . Quand le commutateur d’Union modifie l’objet de données d’un type de base en un type pointeur, les stubs peuvent remplacer la mémoire valide lorsqu’ils copient le référent du pointeur dans l’emplacement de mémoire indiqué par la valeur de [ dans ] un type de base.
La forme des unions doit être identique sur les plateformes pour garantir l’interconnexion.