Nested functions (functions within functions) is a GNU only extension and not part of any regular C standard. Any other compiler will fail to compile this. Due to this I would highly discourage the use of nested functions.
Declare your structs and functions outside. You can then always pass a pointer to your data structures to your function.
struct s {...};
void foo(struct s *, ...);
int main() {
struct s mystruct;
foo(&mystruct, ...);
}