次の方法で共有


C 関数定義

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

構文

translation-unit:
external-declaration
translation-unit external-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-list declaration

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-specifiers declarator
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 は、ローカル変数宣言、外部で宣言された項目への参照、およびステートメントを含む関数本体です。

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

関連項目

関数