Я тут как-то услышал, что Си поддерживает локальные функции. Сначала не верил, потому, что в плюсах это не работает, однако проверил и был удивлен. Но потом попытался замыкание, и оно тоже заработало. Это конечно хорошо, но почему это работает? Разве локальные функции(в примере «a» и «b») не создаются в стеке и не должны разрушаться по выходу из глобальной функции(в примере «foo»)?
#include <stdio.h>
int (*foo(int key))(int){
	int a(int x){
		return x+1;
	}
	int b(int x){
		return x-1;
	}
	if (key == 0)
		return a;
	else
		return b;
}
int main(){
	int (* f1)(int) = foo(0);
	int (* f2)(int) = foo(1);
	printf("%d %d\n",f1(5),f2(5));
	return 0;
}









