очень обидно было после паскаля обнаружить в C/C++ отсутствие вложенных функций. почему так? по-мне так очень "комплиментарно" всяким там принципам, типа "сокрытие информации" и тому подобных. что-то нашёл про регистр EBP. ну есть же он. или не во всех архитектурах есть его аналоги? почему в стандарте (ANSI C вроде-бы) такое ограничение?
Dukales Локальные функции эмулируются через статические функции локальных классов. Ну и ноликсовая лямбда, да. Да вот не совсем. Локальные и лямбда-функции - это одноразовые функции, которые нельзя зашарить. В неумелых руках это еще один способ написать плохой код.
Dukales А наличие такого регистра вообще никакого отношения ко вложенности функций не имеет. Более того, современные версии компиляторов его уже не используют для адресации операндов в стеке, используя прямо значение ESP.
да наверное всё то же самое, но ещё есть EBP+ а не только EBP- обращения. Sol_Ksacap где? что это? если вы имеете ввиду передача адреса точки входа как параметра, то мне не охото загромождать код передачей указателей на точки входа в функции в другие функции — зачем это? это лишнее. я хочу в процедурном стиле программировать, а ему как раз не хватает сабжа. reverser прочитал до создания топика об этом. не зря я указал стандарт. в GCC много всяких вкусностей — не спорю. _DEN_ меня бы устроили такие локальные функции из тела которых не видно внешних меток, кроме функций. кроме того тогда меня интересует просто хотя-бы C. очень хорошо, что избыточность синтаксиса C++ позволяет обойти эту сложность в каком-то смысле. плохо на самом деле, ну вы поняли. SII я невнимательно читал, хотя там ничего и не написано по делу http://www.wasm.ru/forum/viewtopic.php?pid=65943#p65943
_DEN_ наверное я не понял. видимо делается так, что динамически создаётся копия кода функции? как нерационально. что это, если не секрет?
почитал про C++0x — неясно что это. это домыслы авторов статей или всё это подкреплено реальными заявлениями комитета по стандартам C++ ? когда этот стандарт станет действительным?
нет, не создается. вложенные функции в паскале - самые обычные функции. просто с другой областью видимости
_DEN_ Статические конечно наиболее похожи на обычные функции, но и например функтор должен быть не хуже.
Booster Статические функции имеют сигнатуру обычных (фри-) функций. Это может быть важно, если кому-нибудь понадобится указатель на такую функцию.
Dukales Всё не так просто. У Си большая история, много кода, много пользователей. Должны быть очень веские причины, чтобы что-то ввести. Тут ещё возникает такая проблема. Локальная функция по-идее должна быть видна во всей функции где она описана, а это уже дополнительная сложность для однопроходного компилятора.
Booster как я догадываюсь, дополнение языка такой возможностью, как "вложенные функции", расширяет его, а не изменяет. то есть всё то, что скомпилировалось в C++ стандарта там какого-то древнего года скомпилируется и в нём же, но с введёной этой возможностью. так что пользователи останутся довольными. на это указывает так же то, что в GCC это расширение синтаксиса отключается (то есть включено по умолчанию) какой-то там директивой (вроде бы -explicit), и, по-видимому, не вызывает проблем совместимости. насколько я представляю, это ничуть не проблема
Dukales Ошибаешься, любое нововведение изменяет язык, а не дополняет. Это так только кажется, что ничего не изменится. Это проблема, поверь. Если что-то и введут, то только планомерно и в тесной связи с разработчиками компиляторов.
Booster эхх... верю. тогда ну этот ANSI C. лучше уж тогда GCC с его опережающими время нововведениями (а может и просто ответвлениями).