169 похожих чатов

Скажите, вложенные функции в СИ нормальная практика? какие могут быть

трудности при использовании?
int outerFunction(int value) {
// nested function inside outerFunction
int nestedFunction(int x) {
return x * x;
}

return nestedFunction(value));
}

хочу написать подобную для валидации, типо как лямбда. функция применяется только внутри другой функции, это как бы инкапсулирует.

22 ответов

41 просмотр

их нет, всё просто

Они запрещены если это ты видишь где-то в куде то это какое-то расширение конкретной компилятора

Ilya Zviagin
Они запрещены если это ты видишь где-то в куде то ...

Мне казалось что они разрешены Но запрещен их вызов вне скоупа определителя (из-за замыкания)

э́то ГНУ

Ваще канеш эт не оч что нельзя

Ilya Zviagin
Они запрещены если это ты видишь где-то в куде то ...

Почему запрещены ? я в js-е такое же могу использовать и все будет круто работать.

123
Почему запрещены ? я в js-е такое же могу использо...

Язык их не предусматривает. Функция по стандарту не может быть определена в теле другой функции. При чём тут JS - я не понимаю

Ilya Zviagin
Язык их не предусматривает. Функция по стандарту н...

А можно плз носом ткнуть, где это в стандарте? Недавно как раз спорил по этому поводу, но нормально доказать, почему так делать нельзя не смог.

123
Почему запрещены ? я в js-е такое же могу использо...

В C++ есть лямбды, это функциональные объекты, их можно определять внутри других функций. В чистом С нет таких возможностей вообще. Функции либо глобальные, либо статические в рамках одной единицы трансляции. Лично мне всё это вообще дико слышать - зачем надо пытаться определить функцию внутри другой функции - для меня не понятно. Чем просто функция , определённая рядом, хуже ? @andreymisyurov

efg
А можно плз носом ткнуть, где это в стандарте? Нед...

Вот ссылка на CPR, там должны быть ссылки на главы стандарта https://en.cppreference.com/w/c/language/function_definition

Ilya Zviagin
В C++ есть лямбды, это функциональные объекты, их ...

Это полезно в случаях когда нужно применить функцию так, чтобы в нем

Ilya Zviagin
В C++ есть лямбды, это функциональные объекты, их ...

Смысл есть, с ещё одним расширением гну это позволяет делать полноценные лямбды в си, которые ещё и выглядят хорошо.

Ilya Zviagin
...и никуда не переносятся

Везде, где есть гцц с определенной версии)) Имхо переносимость между компиляторами слишком переоценена.

Для сохранения состояния между вызовами есть static-переменные. Всё остальное покрывается обычной функцией, определённой отдельно.

уже обсуждали этот момент в пьюр чате, там и ссылка была на реализацию замыканий и генераторов

Ilya Zviagin
В C++ есть лямбды, это функциональные объекты, их ...

Область видимости легче контролировать + Лямбды это мощный инструмент

Andrey-Andrey Автор вопроса
Ilya Zviagin
В C++ есть лямбды, это функциональные объекты, их ...

ну смотри чем я рукаводствовался. с кодом же еще туева хуча людей работает, и я хотел чтобы мой функционал как можно меньше их затрагивал. типо инкапсулировал, чтобы ее ни откуда из другого места даже вызвать нельзя было. но по итогу код ревью такое не прошно, все равно вынес статической функцией рядышком.

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Any electron dev here?
Sayanth Tezro
12
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Карта сайта