宣告的概觀
「 宣告 」 指定的解譯方式,並識別項的一組屬性。 一種宣告,也會產生存放裝置新增至保留的物件或函式名稱是識別項稱為 「 定義 」。 C 宣告變數、 函式和型別有這種語法:
語法
declaration:
宣告規範初始化宣告子清單選擇**;**宣告規範:
儲存類別規範屬性 seq opt宣告規範opt
/ * 屬性 seq 選擇是 Microsoft 特定 * /
型別規範的宣告規範opt
型別限定詞的宣告規範opt
初始化宣告子清單:
初始化宣告子初始化宣告子清單 , 初始化宣告子
初始化宣告子:
宣告子宣告子**=** 初始設定式
注意事項 |
---|
這個語法declaration下面幾節中未贅述。在下列各節中的語法通常是以declarator為非末端。 |
在宣告初始化宣告子清單包含名為 ; 識別項 初始化的初始設定式是縮寫。 初始化宣告子清單是逗點分隔多個宣告,每一個都可以有額外的型別資訊或初始設定式,或兩者的順序。 declarator包含識別項,如果有的話,所宣告。 宣告規範為非末端是由一連串指示的連結、 存放工期的型別和儲存類別規範所組成,並至少屬於多個宣告所代表的實體型別。 因此,宣告所組成的儲存類別規範、 型別規範、 型別限定詞、 多個宣告,以及初始設定式的某些組合。
宣告可以包含一或多個選擇性的屬性列在屬性 seq。 seq 是序列的縮寫。 這些 Microsoft 專屬的屬性執行多種功能,本書將詳細討論。 如需這些屬性的清單,請參閱 C 語言語法摘要。
在 [一般形式的變數宣告中, 型別規範提供變數的資料型別。 型別規範可以是複合,以藉由修改型別時 const 或volatile。 declarator提供的變數,可能已經過修改,宣告一個陣列或指標型別名稱。 例如:
int const *fp;
宣告變數,名為fp為不可修改的指標 (const) int的值。 您可以使用以逗號分隔的多個宣告子宣告中的檔案,以定義一個以上的變數。
宣告必須有一個以上的宣告,或其型別規範必須宣告結構標籤、 聯集的標籤或列舉型別的成員。 多個宣告會提供任何識別項其餘的資訊。 宣告子是可修改以括號括住識別項 ([]),星號 (*),或括號 ( () ) 來宣告陣列、 指標或函式型別,分別。 當您宣告 (例如字元、 整數和浮點數的項目),簡單的變數或結構和等位的簡單的變數, declarator是一個識別項。 如需有關多個宣告的詳細資訊,請參閱多個宣告和區域變數宣告。
所有定義隱含宣告,但並非所有的宣告會定義。 比方說,區域變數宣告開頭的extern的儲存類別規範"參考,"而不是 「 定義 」 的宣告。 之前定義時,參考的外部變數時,或如果它定義在另一個原始程式檔從那個合用, extern是必要的宣告。 儲存區未配置的 「 參考 」 的宣告,也可以變數會初始化宣告。
變數宣告中只需要一個儲存類別或型別 (或兩者)。 除了__declspec,只能有一個儲存類別規範允許宣告中,且並非所有的儲存類別規範都能出現在每個內容。 __declspec與其他的儲存類別規範,允許儲存類別,且允許一次以上。 如何儲存及初始化,宣告的項目和程式的哪些部分可以參考的項目,則會影響的儲存類別規範宣告。
儲存類別規範 c 中所定義的終端機包括自動, extern, 註冊, 靜態,以及typedef。 此外,Microsoft C 包括儲存類別規範終端機__declspec。 所有儲存類別規範以外的終端機typedef和__declspec中討論儲存類別。 請參閱 Typedef 宣告如需有關資訊typedef。 請參閱延伸的儲存類別屬性如需有關資訊__declspec。
來源應用程式和目前狀態中宣告的位置或缺乏其他宣告的變數是在決定變數的存留期的重要因素。 可以有多個 redeclarations,但只有一個定義。 不過,定義可以出現在一個以上的轉譯單位中。 使用內部的連結物件,此規則適用於分開每一個轉譯單位中,因為在內部連結的物件是只用於轉譯單位。 使用外部連結的物件,這個規則會套用到整個程式中。 請參閱生命週期、 範圍、 可見性和連結如需有關 [可見性。
型別規範中提供個人資訊的資料類型的識別項。 預設值的型別規範是int。 如需詳細資訊,請參閱型別規範中。 型別標記、 結構和等位的元件名稱和列舉型別常數,也可以定義型別規範。 如需詳細資訊,請參閱列舉型別宣告, 結構宣告,以及 等位宣告。
有兩個型別限定詞終端機: const 和volatile。 這些辨識符號指定其他的屬性,透過左值存取該型別的物件時,才是相關的型別。 如需有關 const 和volatile,請參閱的型別限定詞。 左值的定義,請參閱值 (L-VALUE) 和 R-Value 運算式。