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