所谓内嵌函数(nested function)是指定义在另一个函数内部的函数,这个特性也是GNU C的扩展特性,但在GNU C++中不被支持。内嵌函数名只在其所属代码块中有效,例如:
foo(double a, double b)
{
int square(double x) {return x*x;}
return square(a) + square(b);
}
内嵌函数可以访问在其定义前所能看到的变量,包括宿主函数的形参和在宿主函数内部先于该内嵌函数定义变量。例如:
bar(int *array, int offset, int size)
{
int access(int index)
{
return array[index + offset];
}
int i;
... ...
for(i=0; i<size; i++){
access(i);
}
}
在函数内部任何可以出现变量定义语句的地方均可以出现内嵌函数,换句话说,内嵌函数可以跟其他的声明语句混合使用。