const 關鍵字會修改型別宣告的型別或函式參數的型別,防止值變化。
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型
-
指定有效的 MIDL 整數、字元、字串或布林型別。 有效的 MIDL 類型包括 small、 short、 long、 char、char*、 wchar_t、 wchar_t *、 byte、 byte * 和 void *。 整數與字元類型可為 有號 或 無號。
-
識別碼
-
指定有效的 MIDL 識別碼。 有效的 MIDL 識別碼最多包含 31 個字母數字和/或底線字元,且必須以字母或底線字元開頭。
-
const-表達式
-
指定適合特定類型的表達式、識別碼或數值或字元常數:整數常數的常數整數文字或常數整數表達式;可在編譯時計算布林型別的布林表達式;字元類型為單一字元常數;以及字串常數用於[字串]型別。 VOID * 型別只能初始化為 NULL。
-
類型-屬性-列表
-
指定一個或多個適用於該型別的屬性。
-
指標型
-
指定一個有效的 MIDL 指標類型。
-
宣告者與宣告者列表
-
規範標準 C 宣告符,如識別碼、指標宣告符及陣列宣告符。 欲了解更多資訊,請參閱 陣列與 Sized-Pointer 屬性、 陣列,以及 陣列與指標。 聲明符列表由一個或多個聲明符組成,並以逗號分隔。 函式聲明器中的參數名稱識別碼為可選。
-
function-attr-list
-
指定零個或多個屬性適用於函數。 有效的函式屬性有 [callback]、[local];指標屬性 [ref]、[unique] 或 [ptr];以及使用屬性 [string]、[ignore] 和 [context_handle]。
-
型別指定器
-
PTR-DECL
-
指定零個或多個指標聲明符。 指標聲明器與 C 語言中使用的指標聲明器相同。它是由 * 指示符、修飾符如 far 以及限定符 const 組成。
-
函數名稱
-
指定遠端程序的名稱。
-
參數-屬性-列表
-
指定零個或多個方向屬性、欄位屬性、使用屬性及指標屬性,適用於指定參數類型。 用逗號分隔多個屬性。
備註
MIDL 允許你在 IDL 檔案的介面主體中宣告常數整數、字元、字串和布林值型別。 Const 類型宣告會在產生的標頭檔中重現,作為 #define 指令。
DCE IDL 編譯器不支援常數表達式。 因此,使用 MIDL 編譯器 /osf 交換器時,此功能無法使用。
先前定義的常數可作為後續常數的指定值。 常數積分表達式的值會依照 C 轉換規則自動轉換為相應的整數型態。
字元常數的值必須是單引號的 ASCII 字元。 當字元常數為單引號字元本身('),則反斜線字元(\)必須置於單引號字元之前,如 \'。
字串常數的值必須是雙引號字串。 在字串中,反斜線\()字元必須置於字面雙引號字元( 「」) 之前,如 \“。 在字串中,反斜線字元(\)代表轉義字元。 字串常數最多可包含 255 個字元。
NULL 是 void * 型態常數的唯一有效值。 與 const 宣告相關的任何屬性都會被忽略。
MIDL 編譯器不會在 const 初始化時檢查範圍錯誤。 例如,當你指定「const short x = 0xFFFFFFFF;」時,MIDL 編譯器不會回報錯誤,初始化器會在產生的標頭檔中重現。
Examples
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 );
另請參閱