It's not trivial to execute nested functions such that they have the proper access to local variables in the having function(s), so they were deliberately left out of C as a simplification. (gcc does permit them, as an extension.) For many potential uses of nested functions (e.g. qsort comparison functions), an adequate if slightly difficult solution is to use an adjacent function with static declaration, communicating if essential via a few static variables. (A cleaner solution, by unsupported by qsort, is to pass around a pointer to a structure containing the essential context.)