¿Por qué se ponen las declaraciones entre func () y {}?

En mi fuente vi a menudo

func(...) int b; char c; { ... } 

¿Por qué poner variables allí? ¿Cambia el scope?

Como aquí: http://www.mirrors.docunext.com/lxr/http/source/src/bin/sed/lib/regex_internal.c?v=haiku

 re_string_allocate (pstr, str, len, init_len, trans, icase, dfa) 51 re_string_t *pstr; 52 const char *str; 53 int len, init_len, icase; 54 RE_TRANSLATE_TYPE trans; 55 const re_dfa_t *dfa; 56 { 57 reg_errcode_t ret; 58 int init_buf_len; 59 

Eso es solo un estilo antiguo, pre-ANSI C. ¡La noción completa de declaraciones de funciones con parámetros de tipo no se introdujo hasta más tarde!

Este es el estilo K&R (antiguo), funciona, pero ..

Esa es solo la forma antigua (K&R) de declarar parámetros en C.

 /* Old way of declaring parameters*/ void myFunc(a, b) int a; int b; { ... } 

Ya nadie lo hace de esa manera, a menos que necesite comstackr su código en un comstackdor realmente antiguo, por lo que o bien fue escrito con los comstackdores antiguos en mente, o ese código es realmente antiguo.