They are used in languages like Pascal for (at least) two reasons:
They allow functional decomposition without polluting namespaces. You can define a single publicly visible function that implements some complex logic by relying one or more nested functions to break the problem into smaller, logical pieces.
They simplify parameter passing in some cases. A nested function has access to all the parameters and some or all of the variables in the scope of the outer function, so the outer function doesn't have to explicitly pass a pile of local state into the nested function.
No you can't have a nested function in C. The closest you can come is to declare a function inside the definition of another function. The definition of that function has to appear outside of any other function body, though.
E.g.
void f(void)
{
// Declare a function called g
void g(void);
// Call g
g();
}
// Definition of g
void g(void)
{
}
As others have answered, standard C does not support nested functions.
Nested functions are used in some languages to enclose multiple functions and variables into a container (the outer function) so that the individual functions (excluding the outer function) and variables are not seen from outside.
In C, this can be done by putting such functions in a separate source file.
Define the main function as global and all the other functions and variables as static.
Now only the main function is visible outside this module.
I mention this as many people coding in C are now using C++ compilers (such as Visual C++ and Keil uVision) to do it, so you may be able to make use of this...
Although not yet permitted in C, if you're using C++, you can achieve the same effect with the lambda functions introduced in C++11:
void f()
{
auto g = [] () { /* Some functionality */ }
g();
}
is this not a nested function in C? ( the function displayAccounts() )
I know I could have defined the function differently and passed variables and what not but anyhow works nicely as I needed to print the accounts multiple times.
(snipet taken from a school assignment)...
//function 'main' that executes the program.
int main(void)
{
int customerArray[3][3] = \{\{1, 1000, 600}, {2, 5000, 2500}, {3, 10000, 2000}}; //multidimensional customer data array.
int x, y; //counters for the multidimensional customer array.
char inquiry; //variable used to store input from user ('y' or 'n' response on whether or not a recession is present).
//function 'displayAccounts' displays the current status of accounts when called.
void displayAccounts(void)
{
puts("\t\tBank Of Despair\n\nCustomer List:\n--------------");
puts("Account # Credit Limit\t Balance\n--------- ------------\t -------");
for(x = 0; x <= 2; x++)
{
for(y = 0; y <= 2; y++)
printf("%9d\t", customerArray[x][y]);
puts("\n");
}
}
displayAccounts(); //prints accounts to console.
printf("Is there currently a recession (y or n)? ");
//...
return 0;
}