这种形式的函数定义:
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]