switch_is-Attribut
Das [switch_is]- Attribut gibt den Ausdruck oder Bezeichner an, der als Union-Diskriminant fungiert, der das Union-Element auswählt.
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]]
, ...);
Parameter
-
struct-tag
-
Gibt ein optionales Tag für eine Struktur an.
-
limited-expr
-
Gibt einen von MIDL unterstützten C-Sprachausdruck an. Fast alle C-Sprachausdrücke werden unterstützt. Der MIDL-Compiler unterstützt bedingte Ausdrücke, logische Ausdrücke, relationale Ausdrücke und arithmetische Ausdrücke. MIDL lässt keine Funktionsaufrufe in Ausdrücken zu und lässt keine Operatoren vor und nach dem Inkrement sowie vor und nach dem Dekrement zu.
-
field-attr-list
-
Gibt null oder mehr Feldattribute an, die für einen Union-Member gelten. Gültige Feldattribute sind [first_is], [last_is], [length_is], [max_is], [size_is]; die Verwendungsattribute [string], [ignore] und [context_handle]; das Zeiger-Attribut [ref], [eindeutig], oder [ptr]; und für Mitglieder, die selbst Gewerkschaften sind, das Union-Attribut [switch_type]. Trennen Sie mehrere Feldattribute durch Kommas.
-
union-type-specifier
-
Gibt den Union-Typbezeichner an. Eine optionale Speicherspezifikation kann dem Typbezeichner vorangestellt werden.
-
declarator und declarator-list
-
Gibt einen Standard-C-Deklarator an, z. B. einen Bezeichner, einen Zeiger-Deklarator und einen Array-Deklarator. (Funktionsdeklaratoren und Bitfelddeklarationen sind in Unions nicht zulässig, die in Remoteprozeduraufrufen übertragen werden. Diese Deklaratoren sind in Unions zulässig, die nicht übertragen werden.) Trennen Sie mehrere Deklaratoren durch Kommas.
-
function-attribute-list
-
Gibt null oder mehr Attribute an, die für die Funktion gelten. Gültige Funktionsattribute sind [Callback], [local]; das Zeiger-Attribut [ref], [eindeutig], oder [ptr]; und die Verwendungsattribute [string], [ignore] und [context_handle].
-
Typspezifizierer
-
Gibt einen Basistyp, eine Struktur, eine Union, einen Enumerationstyp oder einen Typbezeichner an. Eine optionale Speicherspezifikation kann dem Typbezeichner vorangestellt werden.
-
Zeiger-Deklarator
-
Gibt null oder mehr Zeiger-Deklaratoren an. Ein Zeigerdeklarations-Deklarator ist identisch mit dem Zeigerdeklarations-Deklarator, der in C verwendet wird. es wird aus dem * -Bezeichner, Modifizierern wie far und dem Qualifizierer const erstellt.
-
Funktionsname
-
Gibt den Namen der Remoteprozedur an.
-
param-attr-list
-
Gibt null oder mehr Attribute an, die für den angegebenen Parametertyp geeignet sind. Parameterattribute können die Direktionalattribute [in] und [out], die Feldattribute [first_is], [last_is], [length_is], [max_is], [size_is] und [switch_type]; das Zeiger-Attribut [ref], [eindeutig], oder [ptr]; und die Verwendungsattribute [context_handle] und [Zeichenfolge]. Das Verwendungsattribut [ignore] kann nicht als Parameterattribute verwendet werden. Trennen Sie mehrere Attribute durch Kommas.
-
union-type
Bemerkungen
Das dem [switch_is]- Attribut zugeordnete Diskriminant muss auf derselben logischen Ebene wie die Union definiert werden:
- Wenn union ein Parameter ist, muss der Union-Diskriminant ein anderer Parameter sein.
- Wenn die Union ein Feld einer Struktur ist, muss der Diskriminant ein anderes Feld derselben Struktur sein.
Die Sequenz in einer Struktur oder einer Funktionsparameterliste ist nicht signifikant. Die Vereinigung kann der Diskriminanz entweder vorangehen oder folgen.
Das Attribut [switch_is] kann als Feldattribute oder als Parameterattribute angezeigt werden.
Beispiele
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;
Weitere Informationen