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

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

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

return nestedFunction(value));
}

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

22 ответов

72 просмотра

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
4
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта