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
-
指定应用于联合成员的零个或多个字段属性。 有效字段属性包括 [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
-
指定应用于函数的零个或多个属性。 有效的函数属性为 [callback]、 [local];指针属性 [ref]、[unique]或 [ptr];以及用法属性 [string]、[ignore]和 [context_handle]。
-
type-specifier
-
pointer-declarator
-
指定零个或多个指针声明符。 指针声明符与 C 中使用的指针声明符相同;它由 * 指示符、修饰符(如 far)和限定符 const 构造。
-
function-name
-
指定远程过程的名称。
-
param-attr-list
-
指定适用于指定参数类型的零个或多个属性。 参数属性可以采用方向属性 [in] 和 [out]、字段属性 [first_is]、 [last_is]、 [length_is]、 [max_is]、 [size_is]和 [switch_type];指针属性 [ref]、 [unique]或 [ptr];和用法属性 [context_handle] 和 [string]。 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;