分享方式:


C 函式定義

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

語法

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

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

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

declaration-list
declaration
declaration-list declaration

declarator
pointeropt direct-declarator

direct-declarator:: /* 函式宣告子 */
direct-declarator ( parameter-type-list ) /* 新樣式宣告子 */
direct-declarator ( identifier-listopt ) /* 舊樣式宣告子 */

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

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

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

parameter-declaration
declaration-specifiers declarator
declaration-specifiers abstract-declaratoropt

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

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

函式主體的語法為:

compound-statement
{ declaration-listopt statement-listopt }

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

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

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

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

compound-statement 是函式主體,其中包含區域變數宣告、外部宣告項目的參考,以及陳述式。

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

另請參閱

函數