Являются ли вложенные функции частью стандарта C? - PullRequest
4 голосов
/ 20 марта 2009

Сегодня я натолкнулся на вложенные функции, о которых никогда не слышал. Это только часть GNU C?

Вот пример википедии вложенной функции.

float E(float x)
{
    float F(float y)
    {
        return x + y;
    }
    return F(3);
}

Из кода похоже, что вложенные функции являются своего рода встроенными функциями C ++. Так можно ли вынести адрес вложенной функции?

Edit:

Ссылка gcc, данная Адамом, говорит, что код вложенной функции создается динамически в стеке. Но как вы запускаете код из стека? Разве это не должно быть там в сегменте кода.

Ответы [ 2 ]

12 голосов
/ 20 марта 2009

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

1 голос
/ 20 марта 2009

Вложенные функции: расширение GCC , не стандартное C

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