вложенная функция - PullRequest
       6

вложенная функция

1 голос
/ 05 июня 2010
  1. Я только что столкнулся с тем, что ANSI (ISO) не разрешает вложение функций. Я хочу знать, что заставляет GNU c ito реализовать эту функцию (почему возникает такая необходимость).1004 *

  2. Если функция say (a ()) определена с помощью другой функции say (b ()), то время жизни a () будет всей программой?

  3. Будет ли хранилище для a () ll создано в стеке, выделенном для функции b ().?

Ответы [ 2 ]

1 голос
/ 05 июня 2010

Я считаю, http://en.wikipedia.org/wiki/Nested_function отвечает на большинство ваших вопросов # 1. Вопрос № 2 рассматривается более подробно в http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html, и вопрос № 3 в http://gcc.gnu.org/onlinedocs/gccint/Trampolines.html.

Редактировать: (в сторону) В статье в Википедии необъяснимым образом исключены PL / M из списка языков на основе ALGOL, которые поддерживают вложенные функции. Ах, старые добрые времена.

1 голос
/ 05 июня 2010

1) Высоко субъективно. Понятия не имею. : -)

2) Нет, время жизни внутренней функции ограничено жизнью внешней функции. См. Документацию GCC о вложенных функциях . Если вы сохраните указатель на внутреннюю функцию и вызовете ее после возврата внешней функции, могут произойти плохие вещи.

3) Внутренняя функция выделяет свое собственное пространство стека, как и любая другая функция. Он должен выделять свое собственное пространство для поддержки рекурсивных вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...