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

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

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

return nestedFunction(value));
}

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

22 ответов

77 просмотров

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

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

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++ есть лямбды, это функциональные объекты, их ...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта