трудности при использовании?
int outerFunction(int value) {
// nested function inside outerFunction
int nestedFunction(int x) {
return x * x;
}
return nestedFunction(value));
}
хочу написать подобную для валидации, типо как лямбда. функция применяется только внутри другой функции, это как бы инкапсулирует.
их нет, всё просто
Они запрещены если это ты видишь где-то в куде то это какое-то расширение конкретной компилятора
Мне казалось что они разрешены Но запрещен их вызов вне скоупа определителя (из-за замыкания)
э́то ГНУ
Ваще канеш эт не оч что нельзя
Почему запрещены ? я в js-е такое же могу использовать и все будет круто работать.
Язык их не предусматривает. Функция по стандарту не может быть определена в теле другой функции. При чём тут JS - я не понимаю
Теперь понял, спасибо
А можно плз носом ткнуть, где это в стандарте? Недавно как раз спорил по этому поводу, но нормально доказать, почему так делать нельзя не смог.
В C++ есть лямбды, это функциональные объекты, их можно определять внутри других функций. В чистом С нет таких возможностей вообще. Функции либо глобальные, либо статические в рамках одной единицы трансляции. Лично мне всё это вообще дико слышать - зачем надо пытаться определить функцию внутри другой функции - для меня не понятно. Чем просто функция , определённая рядом, хуже ? @andreymisyurov
Вот ссылка на CPR, там должны быть ссылки на главы стандарта https://en.cppreference.com/w/c/language/function_definition
Это полезно в случаях когда нужно применить функцию так, чтобы в нем
Смысл есть, с ещё одним расширением гну это позволяет делать полноценные лямбды в си, которые ещё и выглядят хорошо.
...и никуда не переносятся
Везде, где есть гцц с определенной версии)) Имхо переносимость между компиляторами слишком переоценена.
С дополнением на классы было бы гуд
Для сохранения состояния между вызовами есть static-переменные. Всё остальное покрывается обычной функцией, определённой отдельно.
уже обсуждали этот момент в пьюр чате, там и ссылка была на реализацию замыканий и генераторов
Область видимости легче контролировать + Лямбды это мощный инструмент
@MasterZiv объясняй за минус))
ну смотри чем я рукаводствовался. с кодом же еще туева хуча людей работает, и я хотел чтобы мой функционал как можно меньше их затрагивал. типо инкапсулировал, чтобы ее ни откуда из другого места даже вызвать нельзя было. но по итогу код ревью такое не прошно, все равно вынес статической функцией рядышком.
Обсуждают сегодня