旧形式の関数宣言と関数定義では、ANSI C 標準で推奨される構文とは若干異なる規則を使用してパラメーターが宣言されます。 まず、旧形式の宣言にはパラメーター リストがありません。 次に、関数定義では、パラメーターはリストされますが、その型はパラメーター リストで宣言されません。 型宣言は、関数本体を構成する複合ステートメントの前に置かれます。 旧形式の構文は廃止されているため、新しいコードでは使用しないでください。 ただし、旧形式の構文を使用したコードも、引き続きサポートされます。 この例は、旧形式の宣言と定義を示しています。
double old_style(); /* Obsolete function declaration */
double alt_style( a , real ) /* Obsolete function definition */
double *real;
int a;
{
return ( *real + a ) ;
}
整数、または int
と同じサイズのポインターを返す関数に、宣言は不要ですが、宣言することをお勧めします。
ANSI C 標準に準拠するために、省略記号を使った旧形式の関数宣言では、/Za オプションでのコンパイル時にエラーが、/Ze でのコンパイル時にはレベル 4 の警告が発生するようになりました。 次に例を示します。
void funct1( a, ... ) /* Generates a warning under /Ze or */
int a; /* an error when compiling with /Za */
{
}
この宣言は、プロトタイプとして次のように書き直す必要があります。
void funct1( int a, ... )
{
}
旧形式の関数宣言では、その後、省略記号または上位変換された型と同じでない型のパラメーターで同じ関数を宣言または定義した場合にも、警告が発生します。
次のセクション「C 関数定義」では、旧形式の構文を含む関数定義の構文を示します。 旧形式の構文のパラメーター リストの非終端要素は、identifier-list です。