C 関数定義

関数定義は、関数の名前、受け取ることを想定するパラメーターの種類と数、および戻り値の型を指定します。 関数定義には、ローカル変数の宣言を持つ関数本体と、関数の処理を決定するステートメントも含まれます。

構文

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

external-declaration: /* 外部 (ファイル) スコープでのみ使用できます */
    function-definition
    declaration

function-definition:
    declaration-specifiersoptattribute-seqoptdeclaratordeclaration-listoptcompound-statement

/* attribute-seq は Microsoft 固有の仕様です */

プロトタイプ パラメーターは次のとおりです。

declaration-specifiers:
    storage-class-specifierdeclaration-specifiersopt
    type-specifierdeclaration-specifiersopt
    type-qualifierdeclaration-specifiersopt

declaration-list:
    declaration
    declaration-listdeclaration

declarator:
    pointeroptdirect-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-specifiersdeclarator
    declaration-specifiersabstract-declaratoropt

旧式の関数定義のパラメーター リストは、この構文を使用します。

identifier-list: /* 古い形式の関数定義と宣言で使用します */
    identifier
    identifier-list,identifier

関数本体の構文は次のとおりです。

compound-statement:
    {declaration-listoptstatement-listopt}

関数宣言を変更できるストレージ クラスの指定子は externstatic だけです。 extern 指定子は、関数が他のファイルから参照できること、つまり、関数名はリンカーにエクスポートされることを指定します。 static 指定子は、関数が他のファイルから参照できないこと、つまり、名前がリンカーによってエクスポートされないことを示します。 ストレージ クラスが関数定義に表示されない場合、extern と見なされます。 いずれの場合も、関数は定義位置からファイルの末尾まで常に参照可能です。

省略可能な declaration-specifiers と必須の declarator によって、関数の戻り値の型と名前が指定されます。 declarator は、関数の名前を指定する識別子と、関数名の後に続くかっこの組み合わせです。 省略可能な attribute-seq 非終端要素は、「関数の属性」で定義する Microsoft 固有の機能です。

(declarator 構文内の) direct-declarator は、定義されている関数の名前とそのパラメーターの識別子を指定します。 direct-declaratorparameter-type-list が含まれる場合、そのリストですべてのパラメーターの型を指定します。 このような宣言は、それ以降の関数の呼び出しに対する関数プロトタイプとしても機能します。

関数定義の declaration-listdeclaration には、register 以外の storage-class-specifier を含めることはできません。 declaration-specifiers 構文の type-specifier は、register ストレージ クラスが int 型の値に対して指定されている場合にのみ省略できます。

compound-statement は、ローカル変数宣言、外部で宣言された項目への参照、およびステートメントを含む関数本体です。

関数の属性」、「ストレージ クラス」、「戻り値の型」、「パラメーター」、および「関数本体」の各セクションでは、関数定義のコンポーネントについて詳しく説明します。

関連項目

関数