Я тут как-то услышал, что Си поддерживает локальные функции. Сначала не верил, потому, что в плюсах это не работает, однако проверил и был удивлен. Но потом попытался замыкание, и оно тоже заработало. Это конечно хорошо, но почему это работает? Разве локальные функции(в примере «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;
}