型別限定詞
型別限定詞讓兩個屬性的其中一個識別項。 Const 型別限定詞宣告為不可修改的物件。 volatile型別限定詞宣告來指定由程式控制範圍內的程式,它出現時,例如目前執行的執行緒可以合法變更值的項目。
這兩個輸入限定詞, const 和volatile,可以在宣告中出現一次。 型別識別項都可以顯示的任何型別規範; 不過,也不可出現在多個項目宣告中的第一個逗號之後。 例如,下列宣告是合法的:
typedef volatile int VI;
const int ci;
這些宣告不是合法的:
typedef int *i, volatile *vi;
float f, const cf;
型別限定詞就存取為左值運算式中的識別項時,才是相關。 請參閱值 (L-VALUE) 和 R-Value 運算式為左值和運算式的相關資訊。
語法
- 型別限定詞:
constvolatile
下列是合法的 const 和volatile宣告:
int const *p_ci; /* Pointer to constant int */
int const (*p_ci); /* Pointer to constant int */
int *const cp_i; /* Constant pointer to int */
int (*const cp_i); /* Constant pointer to int */
int volatile vint; /* Volatile integer */
如果陣列型別的規格中包含的型別限定詞,限定的項目,不陣列型別。 如果函式型別的規格包含辨識符號,則這個行為未定義。 既不volatile或 const 影響值的範圍或算術物件的屬性。
這份清單將告訴您如何使用 const 和volatile。
Const 關鍵字可以用來修改任何基本或彙總的型別或任何型別,物件的指標或typedef。 如果項目以宣告只能 const 型別限定詞,其型別會被取為 const int。 A const 變數可以進行初始化,或可以放在唯讀的儲存區域。 Const 關鍵字適用於宣告指向 const 因為這需要函式不變更任何形式的指標。
編譯器會假設,在程式中,隨時volatile變數可以由未知的處理序的使用,或是修改它的值。 因此,不論在命令中指定的最佳化行中,每個工作分派到的程式碼,或參考的volatile必須產生變數,即使它似乎沒有任何作用。
如果volatile單獨使用, int假設。 volatile型別規範可以用來提供可靠的存取權的特殊的記憶體位置。 使用volatile與資料物件,可能會存取或改變的訊號處理常式,藉由同時執行的程式,或由特殊的硬體,例如記憶體對應 I/O 控制登錄。 您可以將變數宣告為volatile的存留期內,或者也可以轉換單一的參照位址應包括volatile。
項目可以是兩者都 const 和volatile,在此情況下的項目無法合法修改自己的程式,但無法修改某些非同步處理。