La verdad que creo que no tiene mucho sentido definir una estructura privada a un bloque.
creo que la forma mas conveniente es:
struct cosa
{
int a;
int b;
int c;
}; /*Definicion del tipo struct cosa*/
int a()
{
struct cosa dato; /*declaracion de la varaible dato de tipo struct cosa*/
...
retval = b(&dato);
}
int b(struct cosa *puntero)
{
...
}
de ese modo la cariable dato es local a la funcion a, mietras que el tipo struct cosa es global (o local al modulo)
Espero que eso aclare tu duda.
Saludos