switch_is (attributo)
L'attributo [switch_is] specifica l'espressione o l'identificatore che agisce come discriminante dell'unione che seleziona il membro dell'unione.
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]]
, ...);
-
struct-tag
-
Specifica un tag facoltativo per una struttura.
-
expr limitato
-
Specifica un'espressione linguaggio C supportata da MIDL. Sono supportate quasi tutte le espressioni del linguaggio C. Il compilatore MIDL supporta espressioni condizionali, espressioni logiche, espressioni relazionali e espressioni aritmetiche. MIDL non consente chiamate di funzione nelle espressioni e non consente operatori pre-incrementi e post-incrementi e post-decrement.
-
field-attr-list
-
Specifica zero o più attributi di campo che si applicano a un membro dell'unione. Gli attributi di campo validi includono [first_is], [last_is], [length_is],[max_is], [size_is]; gli attributi di utilizzo [string], [ignore]e [context_handle]; attributo puntatore [ref], [unique]o [ptr]; e per i membri che si sono unioni, l'attributo unione [switch_type]. Separare più attributi di campo con virgole.
-
union-type-identificatore
-
Specifica l'identificatore del tipo di unione . Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.
-
dichiaratore e dichiaratore-list
-
Specifica un dichiaratore C standard, ad esempio un identificatore, un dichiaratore puntatore e un dichiaratore di matrice. Le dichiarazioni di funzione e le dichiarazioni di campo bit non sono consentite nelle unioni trasmesse nelle chiamate di procedura remota. Questi dichiaratori sono consentiti nelle unioni che non vengono trasmesse. Separare più dichiaratori con virgole.
-
function-attribute-list
-
Specifica zero o più attributi che si applicano alla funzione. Gli attributi di funzione validi sono [callback], [local]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string], [ignore]e [context_handle].
-
identificatore di tipo
-
Specifica un tipo di base, uno struct, un'unione, un tipo di enumerazione o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.
-
puntatore dichiaratore
-
Specifica zero o più dichiaratori puntatori. Un dichiaratore puntatore è lo stesso del dichiaratore puntatore usato in C; viene costruito dal designatore *, modificatori come la lontano e il qualificatore const.
-
nome funzione
-
Specifica il nome della routine remota.
-
param-attr-list
-
Specifica zero o più attributi appropriati per il tipo di parametro specificato. Gli attributi dei parametri possono accettare gli attributi direzionali [in] e [out], gli attributi del campo [first_is], [last_is], [length_is], [max_is], [size_is]e [switch_type]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle] e [string]. Impossibile usare l'attributo di utilizzo [ignore] come attributo di parametro. Separare più attributi con virgole.
-
tipo di unione
-
Identifica l'identificatore del tipo di unione .
Il discriminante associato all'attributo [switch_is] deve essere definito allo stesso livello logico dell'unione:
- Quando l'unione è un parametro, il discriminante dell'unione deve essere un altro parametro.
- Quando l'unione è un campo di una struttura, il discriminante deve essere un altro campo della stessa struttura.
La sequenza in una struttura o un elenco di parametri di funzione non è significativa. L'unione può precedere o seguire la discriminazione.
L'attributo [switch_is] può essere visualizzato come attributo di campo o come attributo di parametro.
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;