const 属性
const 关键字 (keyword) 修改类型声明的类型或函数参数的类型,防止值变化。
const const-type identifier = const-expression ;
[ typedef [ , type-attribute-list ] ] const const-type declarator-list;
[ typedef [ , type-attribute-list ] ] pointer-type const declarator-list;
[ [ function-attr-list ] ] type-specifier [ ptr-decl ] function-name(
[ [ parameter-attribute-list ] ] ) const;
const-type [declarator], [ [ parameter-attribute-list ] ] pointer-type const [declarator], ...);
-
const-type
-
指定有效的 MIDL 整数、字符、字符串或布尔类型。 有效的 MIDL 类型包括 small、 short、 long、 char、 char *、 wchar_t、 wchar_t *、 byte、 byte *和 void *。 整数和字符类型可以是 有符号 的,也可以 是无符号的。
-
identifier
-
指定有效的 MIDL 标识符。 有效的 MIDL 标识符由最多 31 个字母数字和/或下划线字符组成,并且必须以字母或下划线字符开头。
-
const-expression
-
指定适用于指定类型的表达式、标识符或数值或字符常量:常量整数文本或整数常量的常量整数表达式;可在编译时为布尔类型计算的 布尔 表达式; 字符 类型的单字符常量;和 [string] 类型的字符串常量。 void * 类型只能初始化为 NULL。
-
type-attribute-list
-
指定应用于类型的一个或多个属性。
-
pointer-type
-
指定有效的 MIDL 指针类型。
-
declarator 和 declarator-list
-
指定标准 C 声明符,例如标识符、指针声明符和数组声明符。 有关详细信息,请参阅 数组和Sized-Pointer属性、 数组和 数组和指针。 declarator-list 由一个或多个声明符组成,用逗号分隔。 函数声明符中的参数名称标识符是可选的。
-
function-attr-list
-
指定应用于函数的零个或多个属性。 有效的函数属性为 [callback]、 [local];指针属性 [ref]、 [unique]或 [ptr];和用法属性 [string]、 [ignore] 和 [context_handle] 。
-
type-specifier
-
ptr-decl
-
指定零个或多个指针声明符。 指针声明符与 C 中使用的指针声明符相同。它由 * 指示符、修饰符(如 far)和限定符 常值构造。
-
function-name
-
指定远程过程的名称。
-
parameter-attribute-list
-
指定适用于指定参数类型的零个或多个方向属性、字段属性、用法属性和指针属性。 用逗号分隔多个属性。
MIDL 允许在 IDL 文件的接口正文中声明常量整数、字符、字符串和布尔类型。 Const 类型声明在生成的头文件中作为 #define 指令重现。
DCE IDL 编译器不支持常量表达式。 因此,使用 MIDL 编译器 /osf 开关时,此功能不可用。
以前定义的常量可用作后续常量的赋值。 常量整型表达式的值根据 C 转换规则自动转换为相应的整数类型。
字符常量的值必须是单引号 ASCII 字符。 当字符常量是单引号字符本身 (') 时,反斜杠字符 (\) 必须位于单引号字符前面,如 \'中所示。
字符串常量的值必须是双引号字符串。 在字符串中,反斜杠 (\) 字符必须位于文本双引号字符之前, ( “ ) ,如 \”。 在字符串中,反斜杠字符 (\) 表示转义字符。 字符串常量最多可以包含 255 个字符。
值 NULL 是 void * 类型的常量的唯一有效值。 与 const 声明关联的任何属性都将被忽略。
MIDL 编译器不会检查常量初始化中的范围错误。 例如,当指定“const short x = 0xFFFFFFFF;”时,MIDL 编译器不会报告错误,并且初始值设定项将在生成的头文件中重现。
const void * p1 = NULL;
const char my_char1 = 'a';
const char my_char2 = my_char1;
const wchar_t my_wchar3 = L'a';
const wchar_t * pszNote = L"Note";
const unsigned short int x = 123;
typedef [string] const char *LPCSTR;
HRESULT GetName([out] wchar_t * const pszName );