Share via


パラメーター

引数は、関数呼び出しによって関数に渡される値の名前です。 パラメーターは、関数が受け取ることを想定している値です。 関数プロトタイプでは、関数名の後のかっこに、関数のすべてのパラメーターと型の一覧が含まれます。 パラメーター宣言は、パラメーターに格納されている値の型、サイズ、および識別子を指定します。

構文

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

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

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

parameter-type-list は、コンマで区切られたパラメーター宣言のシーケンスです。 パラメーター リストの各パラメーターの形式は次のようになります。

registeropttype-specifierdeclaratoropt

auto 属性で宣言された関数パラメーターでは、エラーが発生します。 パラメーターの識別子は、関数に渡される値を参照するために関数本体で使用されます。 プロトタイプでパラメーター名を指定できますが、名前は、宣言の最後でスコープから外れます。 つまり、関数定義で同じ方法または別の方法でパラメーター名を割り当てることができます。 これらの識別子は、関数本体の最も外側のブロックでは再定義できませんが、内部の入れ子のブロックでは、パラメーター リストが外側のブロックであるかのように再定義できます。

parameter-type-list の各識別子は、次の例に示すように、適切な型指定子が前に指定されている必要があります。

void new( double x, double y, double z )
{
    /* Function body here */
}

1 つ以上のパラメーターがパラメーター リストにある場合、リストは、コンマとその後に続く 3 つのピリオド ( , ... ) で終了できます。 "省略記号表記" と呼ばれるこのコンストラクションは、関数への可変数の引数を示します (詳細については、「可変数の引数を使用した呼び出し」を参照。)ただし、関数の呼び出しでは、少なくとも最後のコンマの前にパラメーターと同じ数の引数が必要です。

引数が関数に渡されない場合、パラメーターのリストはキーワード void で置き換えられます。 この void の使い方は、型指定子としての使い方とは異なります。

省略記号表記の使用を含むパラメーターの順序と型は、すべての関数宣言 (存在する場合) および関数定義で同じである必要があります。 通常の算術変換が対応するパラメーターの型と代入互換性を持つ必要があった後の引数の型 (詳細については、「通常の算術変換」を参照)。省略記号の後の引数はチェックされません。 パラメーターは、基本の構造体、共用体、ポインター、または配列型を持つことができます。

コンパイラは、必要に応じて、パラメーターごと、引数ごとに、通常の算術変換を個別に実行します。 変換後、 int より短いパラメーターはなく、パラメーターの型をプロトタイプで として明示的に指定しない限り、パラメーターに floatfloat 型はありません。 つまり、たとえばパラメーターを char として宣言した場合、 int として宣言した場合と同じ効果が発生します。

関連項目

C 関数の定義