奇怪的C语法是什么?

可能重复:
定义中函数标题后的C变量声明
这个C语法的用处是什么?

我试图理解一些C代码,并遇到了这个函数的头部和第一个支撑之间声明变量的地方。

知道这些变量是什么?
他们是本地的还是全球的?

作者打算在这做什么?

void someFunction (m_ptr, n_ptr, params, err) integer *m_ptr; /* pointer to number of points to fit */ integer *n_ptr; /* pointer to number of parameters */ doublereal *params; /* vector of parameters */ doublereal *err; /* vector of error from data */ { //some variables declared here int i; ... ... //body of the function here } 

它们是函数参数。 这是声明它们的另一种方法。 它们的工作方式与普通参数相同。

对于一个相当长但非常有用的解释,请参阅函数声明与原型的替代(K&R)C语法

这些变量是参数的声明。 不知道为什么有人再使用这种风格。 那些类型必须是typedef的。

如果这是旧的遗留代码,那么当前作为关键字真的存在吗?

这是一个K&R风格的声明,它是30年前写的C(它仍然受支持,但在C99中被弃用;我相信它将在C1x中删除)。 从类型的外观来看,代码可能是从Fortran转换而来的,所以谁知道原始版本有多大。

然而,由于存在void ,它并不是严格的原始K&R。

在“现代”C中,它看起来像:

 void someFunction (integer *m_ptr, integer *n_ptr, doublereal *params, doublereal *err) { //some variables declared here int i; ... ... //body of the function here }