共用方式為


C 函式定義

函式定義會指定函式的名稱、預期收到的參數類型及數目,以及其傳回型別。 函式定義也包括函式主體與其區域變數的宣告,以及決定該函式之行為的陳述式。

語法

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration:/* 僅允許在外部 (檔案) 範圍 */
function-definition
declaration

function-definition:
declaration-specifiers選擇attribute-seq選擇declaratordeclaration-list選擇compound-statement

/* attribute-seq 是 Microsoft 特定的 */

原型參數為:

declaration-specifiers:
storage-class-specifierdeclaration-specifiers選擇
type-specifierdeclaration-specifiers選擇
type-qualifierdeclaration-specifiers選擇

declaration-list:
declaration
declaration-list declaration

declarator:
pointer選擇direct-declarator

direct-declarator:/* 函式宣告子 */
direct-declarator(parameter-type-list) /* 新樣式宣告子 */
direct-declarator(identifier-list選擇)/* 過時樣式宣告子 */

定義中的參數清單會使用此語法:

parameter-type-list:/* 參數清單 */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiersabstract-declarator選擇

舊樣式函式定義中的參數清單會使用此語法:

identifier-list:/* 用於過時樣式的函式定義和宣告 */
identifier
identifier-list , identifier

函式主體的語法為:

compound-statement:
{declaration-list選擇statement-list選擇}

唯一可以修改函式宣告的儲存類別規範是 externstaticextern 指定名稱表示可從其他檔案參考該函式;也就是說,會將該函式名稱匯出至連結器。 static規範表示函式無法從其他檔案參考;也就是說,連結器不會匯出名稱。 如果函式定義中不會出現儲存類別,就會假設 extern。 在任何情況下,從定義點到檔案結尾都會顯示該函式。

選擇性 declaration-specifiers 和強制一 declarator 起指定函式的傳回類型和名稱。 declarator 是為函式命名的識別項組合,函式名稱之後會加上括號。 選擇性 attribute-seq 的非終端是函數 屬性中定義的 Microsoft 特定功能。

direct-declarator語法中的 declarator () 會指定要定義的函式名稱及其參數的識別碼。 direct-declarator如果 包含 parameter-type-list ,清單會指定所有參數的類型。 這類宣告子也可做為函式原型,以便稍後呼叫函式。

declaration函式定義中的 declaration-list ,不能包含 storage-class-specifier 以外的 registertype-specifierdeclaration-specifiers 只有在為 型別的值指定儲存類別時, register 才能省略 語法中的 int

compound-statement是包含區域變數宣告、外部宣告專案參考和語句的函式主體。

函式屬性儲存類別傳回類型參數函式主體等節會詳細說明函式定義的元件。

請參閱

函式