atribut switch_is
Atribut [switch_is] menentukan ekspresi atau pengidentifikasi yang bertindak sebagai diskriminan serikat pekerja yang memilih anggota serikat pekerja.
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
-
Menentukan tag opsional untuk struktur.
-
limited-expr
-
Menentukan ekspresi bahasa C yang didukung oleh MIDL. Hampir semua ekspresi bahasa C didukung. Kompilator MIDL mendukung ekspresi kondisional, ekspresi logis, ekspresi relasional, dan ekspresi aritmatika. MIDL tidak mengizinkan pemanggilan fungsi dalam ekspresi dan tidak mengizinkan operator pra-dan pasca-kenaikan dan pra-dan pasca-penurunan.
-
field-attr-list
-
Menentukan atribut bidang nol atau lebih yang berlaku untuk anggota serikat. Atribut bidang yang valid meliputi [first_is], [last_is], [length_is], [max_is], [size_is]; atribut penggunaan [string], [ignore], dan [context_handle]; atribut pointer [ref], [unique], atau [ptr]; dan untuk anggota yang mereka sendiri adalah serikat, atribut union [switch_type]. Pisahkan beberapa atribut bidang dengan koma.
-
union-type-specifier
-
Menentukan pengidentifikasi jenis union . Spesifikasi penyimpanan opsional dapat mendahului penentu jenis.
-
deklarator dan daftar deklarator
-
Menentukan deklarator C standar, seperti pengidentifikasi, deklarator penunjuk, dan deklarator array. (Deklarasi fungsi dan deklarasi bit-field tidak diizinkan dalam serikat yang dikirimkan dalam panggilan prosedur jarak jauh. Deklarator ini diperbolehkan dalam serikat yang tidak ditransmisikan.) Pisahkan beberapa deklarator dengan koma.
-
function-attribute-list
-
Menentukan atribut nol atau lebih yang berlaku untuk fungsi. Atribut fungsi yang valid adalah [callback], [local]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [string], [abaikan], dan [context_handle].
-
type-specifier
-
Menentukan jenis dasar, struct, union, enum type, atau type identifier. Spesifikasi penyimpanan opsional dapat mendahului penentu jenis.
-
deklarator penunjuk
-
Menentukan nol atau lebih deklarator penunjuk. Deklarator pointer sama dengan deklarator penunjuk yang digunakan dalam C; ini dibangun dari penunjuk * , pengubah seperti jauh, dan konsekuensi kualifikasi.
-
nama fungsi
-
Menentukan nama prosedur jarak jauh.
-
param-attr-list
-
Menentukan nol atau beberapa atribut yang sesuai untuk jenis parameter yang ditentukan. Atribut parameter dapat mengambil atribut arah [in] dan [out], atribut bidang [first_is], [last_is], [length_is], [max_is], [size_is], dan [switch_type]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [context_handle] dan [string]. Atribut penggunaan [abaikan] tidak dapat digunakan sebagai atribut parameter. Pisahkan beberapa atribut dengan koma.
-
tipe-union
-
Mengidentifikasi penentu jenis union .
Diskriminan yang terkait dengan atribut [switch_is] harus didefinisikan pada tingkat logis yang sama dengan gabungan:
- Ketika penyatuan adalah parameter, penyatuan diskriminan harus menjadi parameter lain.
- Ketika penyatuan adalah bidang struktur, diskriminan harus bidang lain dari struktur yang sama.
Urutan dalam struktur atau daftar parameter fungsi tidak signifikan. Serikat dapat mendahului atau mengikuti diskriminan.
Atribut [switch_is] dapat muncul sebagai atribut bidang atau sebagai atribut parameter.
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;