лямда в c11 польза или извращение?
> Это обычные функции, с телом внутри других функций или есть какие другие особенности?
да, это GNUтое расширение, появившееся еще в конце 90х, кажется студия их категорически до сих пор не поддерживает
> Имеют ли они доступ к локальным переменным внешней функции?
да, к тем, которые определены до описания этой нестед функции
> пример можно?
void f(double *x, double *y, int K)
{ int N, M;
voiid nested(double A[M][K])
{ // переменная N видна, но L уже нет
... A[j]...
}
int L;
...
nested_ptr=nested; // не определено, если будет передано назад и вызвано после окончания работы f, но должно работать, если вызвали пока управление еще не
вернулось из f
nested(x);
...
}
в данном случае я вижу реальную пользу от этой нестед функции в том, что она маппит кусок памяти из x в виде двухмерного массива A[][] и использует его по назначению, код становится компактным и хорошо читаемым, а производительность не падает приближаясь к тому, что могло быть, если бы код был бы написан, например, на фортране.