函式定義中的儲存類別規範會為函式提供 extern 或 static 儲存類別。
語法
function-definition:
declaration-specifiers
選擇attribute-seq選擇declaratordeclaration-list選擇compound-statement
/*
attribute-seq 為 Microsoft 特定 */
declaration-specifiers:
storage-class-specifier
declaration-specifiers
選擇
type-specifier
declaration-specifiers
選擇
type-qualifier
declaration-specifiers
選擇
storage-class-specifier: /* 用於函式定義 */
extern
static
如果函式定義不包含 storage-class-specifier,則儲存類別預設為 extern。 您可以將函式明確宣告為 extern,但並非必要。
如果函式的宣告包含 storage-class-specifierextern,則識別碼的連結會與具有檔案範圍之識別碼的任何可見宣告相同。 如果沒有具有檔案範圍的可見宣告,則識別碼具有外部連結。 如果識別碼具有檔案範圍且沒有 storage-class-specifier,則識別碼具有外部連結。 外部連結是指,識別項的每個執行個體表示相同的物件或函式。 如需有關連結和檔案範圍的詳細資訊,請參閱存留期、範圍、可見度和連結 (部分機器翻譯)。
具有 extern 以外之儲存類別規範的區塊範圍函式宣告會產生錯誤。
具有 static 儲存類別的函式只有在本身定義所在的來源檔案中才可見。 所有其他函式無論具有明確或隱含指定的 extern 儲存類別,在程式的所有來源檔案中都可見。 如果需要 static 儲存類別,則必須在第一個函式宣告 (如果有的話) 及函式定義上宣告。
Microsoft 特定的
已啟用 Microsoft 延伸模組時,如果函式定義位於相同的來源檔案中且明確指定 extern 儲存類別,則會為原本宣告時沒有儲存類別 (或具有 static 儲存類別) 的函式提供 static 儲存類別。
使用 /Ze 編譯器選項進行編譯時,在區塊內使用 extern 關鍵字宣告的函式具有全域可見度,使用 /Za 進行編譯時則非如此。 如需考量原始程式碼的可攜性,則不應依賴此功能。
END Microsoft 特定的