switch_is 属性
[switch_is] 属性は、共用体メンバーを選択する共用体判別として機能する式または識別子を指定します。
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
-
構造体の省略可能なタグを指定します。
-
limited-expr
-
MIDL でサポートされる C 言語式を指定します。 ほぼすべての C 言語式がサポートされています。 MIDL コンパイラは、条件式、論理式、リレーショナル式、および算術式をサポートします。 MIDL では、式での関数呼び出しは許可されず、インクリメント前およびインクリメント後およびデクリメント後の演算子は許可されません。
-
field-attr-list
-
共用体メンバーに適用される 0 個以上のフィールド属性を指定します。 有効なフィールド属性には、[first_is]、[last_is]、[length_is]、[max_is]、[size_is]、使用法属性 [string]、[ignore]、および [context_handle];ポインター属性 [ref]、[unique]、または [ptr];また、それ自体が共用体であるメンバーの場合、共用体属性 [switch_type]。 複数のフィールド属性をコンマで区切ります。
-
union-type-specifier
-
共用体の型識別子を指定します。 オプションのストレージ仕様の前に 型指定子を指定できます。
-
declarator と declarator-list
-
識別子、ポインター宣言子、配列宣言子など、標準の C 宣言子を指定します。 (関数宣言子とビット フィールド宣言は、リモート プロシージャ 呼び出しで送信される共用体では許可されません。これらの宣言子は、送信されない共用体で許可されます)。複数の宣言子をコンマで区切ります。
-
function-attribute-list
-
関数に適用される 0 個以上の属性を指定します。 有効な関数属性は [callback], [local]; です。ポインター属性 [ref]、 [unique]、または [ptr];および使用法属性 [string]、 [ignore]、および [context_handle]。
-
type-specifier
-
基本型、構造体、共用体、列挙型、または型識別子を指定します。 オプションのストレージ仕様の前に 型指定子を指定できます。
-
pointer-declarator
-
0 個以上のポインター宣言子を指定します。 ポインター宣言子は、C で使用されるポインター宣言子と同じです。これは、* 指定子、 far などの修飾子、および修飾子 const から構築されます。
-
function-name
-
リモート プロシージャの名前を指定します。
-
param-attr-list
-
指定したパラメーター型に適した 0 個以上の属性を指定します。 パラメーター属性は、方向属性 [in] と [out]、フィールド属性 [first_is]、[last_is]、[length_is]、[max_is]、[size_is]、および [switch_type] を取得できます。 ポインター属性 [ref]、[unique]、または [ptr];と使用法属性 [context_handle] と [文字列]。 usage 属性 [ignore] を パラメーター属性として使用することはできません。 複数の属性をコンマで区切ります。
-
union-type
-
共用体の型指定子を識別します。
解説
[switch_is] 属性に関連付けられている判別は、共用体と同じ論理レベルで定義する必要があります。
- 共用体がパラメーターの場合、共用体判別式は別のパラメーターでなければなりません。
- 共用体が構造体のフィールドである場合、判別は同じ構造の別のフィールドでなければなりません。
構造体または関数パラメーター リスト内のシーケンスは重要ではありません。 和集合は、判別の前に置くか、または従うことができます。
[switch_is] 属性は、フィールド属性またはパラメーター属性として表示できます。
例
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;
関連項目