分享方式:


儲存類別

函式定義中的儲存類別規範會為函式提供 externstatic 儲存類別。

語法

function-definition
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq 為 Microsoft 特定 */

declaration-specifiers
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

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 特定的

另請參閱

C 函式定義