この形式の関数定義:
void fun(int i; int i)
{
}
パラメータ前方宣言機能と呼ばれる GNU C 拡張機能を使用します。
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
この機能により、実際のパラメーター リストの前にパラメーターの前方宣言を行うことができます。これは、たとえば、可変長配列パラメーターを持つ関数で、可変長配列パラメーターの後にサイズ パラメーターを宣言するために使用できます。
例えば:
// valid, len parameter is used after its declaration
void foo(int len, char data[len][len]) {}
// not valid, len parameter is used before its declaration
void foo(char data[len][len], int len) {}
// valid in GNU C, there is a forward declaration of len parameter
// Note: foo is also function with two parameters
void foo(int len; char data[len][len], int len) {}
OPの例では、
void fun(int i; int i) {}
fun
前方パラメーター宣言は、実際のパラメーターのいずれにも使用されておらず、関数定義は実際には次と同等であるため、何の目的も果たしません。
void fun(int i) {}
これは GNU C 拡張であり、C ではないことに注意してgcc
ください-std=c99 -pedantic
。
警告: ISO C では前方パラメータ宣言が禁止されています [-pedantic]