什么是 int foo(a) int a; { return a } 在 C 中是什么意思?

What does int foo(a) int a; { return a } mean in C?

在调查 function declarations 时,我遇到了一种奇怪的(对我来说)函数定义方式:

int f(void); // declaration: takes no parameters
int g(); // declaration: takes unknown parameters
 
int main(void) {
    f(1); // compile-time error
    g(2); // undefined behavior
}
 
int f(void) { return 1; } // actual definition
int g(a,b,c,d) int a,b,c,d; { return 2; } // actual definition

最后一行完全让我困惑。 int g(a,b,c,d) int a,b,c,d; { return 2; } 是什么意思? 这样的问题可能已经有人问过了,但我不知道如何组成一个搜索查询。

g 的定义使用指定参数类型的旧 K&R 方法。

而不是在 () 中指定参数及其类型,只指定名称,然后指定参数的类型,然后指定函数体。

这种声明参数的方式已被弃用,不应再使用,因为除其他原因外,它也不符合函数原型的条件。