вложенные функции

Тема в разделе "LANGS.C", создана пользователем Dukales, 8 янв 2010.

  1. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    очень обидно было после паскаля обнаружить в C/C++ отсутствие вложенных функций. почему так? по-мне так очень "комплиментарно" всяким там принципам, типа "сокрытие информации" и тому подобных.
    что-то нашёл про регистр EBP. ну есть же он. или не во всех архитектурах есть его аналоги?
    почему в стандарте (ANSI C вроде-бы) такое ограничение?
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Dukales
    Ну, что поделать. (Есть лямбда-функции, если что).
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Dukales

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

    Да вот не совсем. Локальные и лямбда-функции - это одноразовые функции, которые нельзя зашарить. В неумелых руках это еще один способ написать плохой код.
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Dukales
    А наличие такого регистра вообще никакого отношения ко вложенности функций не имеет. Более того, современные версии компиляторов его уже не используют для адресации операндов в стеке, используя прямо значение ESP.
     
  5. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    да наверное всё то же самое, но ещё есть EBP+ а не только EBP- обращения.
    Sol_Ksacap
    где? что это?
    если вы имеете ввиду передача адреса точки входа как параметра, то мне не охото загромождать код передачей указателей на точки входа в функции в другие функции — зачем это? это лишнее. я хочу в процедурном стиле программировать, а ему как раз не хватает сабжа.
    reverser
    прочитал до создания топика об этом. не зря я указал стандарт. в GCC много всяких вкусностей — не спорю.
    _DEN_
    меня бы устроили такие локальные функции из тела которых не видно внешних меток, кроме функций. кроме того тогда меня интересует просто хотя-бы C.
    очень хорошо, что избыточность синтаксиса C++ позволяет обойти эту сложность в каком-то смысле. плохо на самом деле, ну вы поняли.
    SII
    я невнимательно читал, хотя там ничего и не написано по делу
    http://www.wasm.ru/forum/viewtopic.php?pid=65943#p65943
     
  6. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    _DEN_
    наверное я не понял. видимо делается так, что динамически создаётся копия кода функции? как нерационально.
    что это, если не секрет?
     
  7. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    почитал про C++0x — неясно что это. это домыслы авторов статей или всё это подкреплено реальными заявлениями комитета по стандартам C++ ? когда этот стандарт станет действительным?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Dukales
    Не поняли, код динамически не создаётся в любом случае.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нет, не создается. вложенные функции в паскале - самые обычные функции. просто с другой областью видимости
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Почему именно статических?
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Статические конечно наиболее похожи на обычные функции, но и например функтор должен быть не хуже.
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Статические функции имеют сигнатуру обычных (фри-) функций. Это может быть важно, если кому-нибудь понадобится указатель на такую функцию.
     
  13. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    так и не понял зачем мне здесь про лямбда-функции здесь написали.
     
  14. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    здесь здесь пилять! дайте редактирование хотя бы с квотой 1 раз в месяц!!!
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Dukales
    Всё не так просто. У Си большая история, много кода, много пользователей. Должны быть очень веские причины, чтобы что-то ввести. Тут ещё возникает такая проблема. Локальная функция по-идее должна быть видна во всей функции где она описана, а это уже дополнительная сложность для однопроходного компилятора.
     
  16. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    Booster
    как я догадываюсь, дополнение языка такой возможностью, как "вложенные функции", расширяет его, а не изменяет. то есть всё то, что скомпилировалось в C++ стандарта там какого-то древнего года скомпилируется и в нём же, но с введёной этой возможностью. так что пользователи останутся довольными. на это указывает так же то, что в GCC это расширение синтаксиса отключается (то есть включено по умолчанию) какой-то там директивой (вроде бы -explicit), и, по-видимому, не вызывает проблем совместимости.
    насколько я представляю, это ничуть не проблема
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Dukales
    Ошибаешься, любое нововведение изменяет язык, а не дополняет. Это так только кажется, что ничего не изменится.

    Это проблема, поверь. Если что-то и введут, то только планомерно и в тесной связи с разработчиками компиляторов.
     
  18. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    Booster
    эхх... верю. тогда ну этот ANSI C. лучше уж тогда GCC с его опережающими время нововведениями (а может и просто ответвлениями).