¿Qué extraña syntax de C es esto?

Posibles duplicados:
Declaraciones de variables C después del encabezamiento de la función en la definición
¿Qué es útil acerca de esta syntax de C?

Intenté entender un código C y encontré esto donde las variables se declaran entre el jefe de la función y la primera llave.

¿Alguna idea de cuáles son estas variables?
¿Son locales o globales?

¿Qué pretende hacer el autor aquí?

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 } 

Son argumentos de función. Esta es una forma alternativa de declararlos. Funcionan de la misma manera que los argumentos normales.

Para una explicación bastante larga pero muy informativa, consulte la syntax de la Alternativa (K&R) C para la statement de la función frente a los prototipos

Esas variables son una statement de los argumentos. Ya no estoy seguro de por qué alguien usa ese estilo. Esos tipos deben ser typedef sin embargo.

Si este es un código antiguo, ¿existió el vacío como una palabra clave en ese entonces?

Esa es una statement de estilo K & R, y es cómo se escribió C hace 30 años (todavía es compatible, pero está obsoleto en C99; creo que se eliminará en C1x). Por el aspecto de los tipos, el código probablemente se convirtió de Fortran, así que quién sabe cuántos años tenía el original.

Sin embargo, no es estricto el K&R original, debido a la presencia del void .

En “C” moderna, eso se vería así:

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