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

У нас может быть вложенная функция в C? Каково использование вложенных функций? Если они существуют в C, их реализация отличается от компилятора до компилятора?

84
задан Antti Haapala 5 June 2019 в 02:19
поделиться

5 ответов

Вы не можете определить функцию внутри другой функции в стандарте C.

Вы можете объявить функцию внутри функции, но это не вложенная функция.

gcc имеет расширение языка, которое позволяет использовать вложенные функции . Они нестандартны и, как таковые, полностью зависят от компилятора.

97
ответ дан 24 November 2019 в 08:33
поделиться

Вложенные функции не являются частью ANSI C , однако они являются частью Gnu C ].

18
ответ дан 24 November 2019 в 08:33
поделиться

Нет, вы не можете вложенная функция в C . Самое близкое, что вы можете сделать, - это объявить функцию внутри определения другой функции. Однако определение этой функции должно появляться вне тела любой другой функции.

Например.

void f(void)
{
    // Declare a function called g
    void g(void);

    // Call g
    g();
}

// Definition of g
void g(void)
{
}
15
ответ дан 24 November 2019 в 08:33
поделиться

Как уже ответили другие, стандарт C не поддерживает вложенные функции.

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

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

2
ответ дан 24 November 2019 в 08:33
поделиться

Нет, их нет в C.

Они используются в таких языках, как Паскаль, по (как минимум) двум причинам:

  1. Они позволяют функциональную декомпозицию без загрязнения пространств имен. Вы можете определить одну общедоступную функцию, которая реализует некоторую сложную логику, полагаясь на одну или несколько вложенных функций, чтобы разбить проблему на более мелкие логические части.
  2. В некоторых случаях они упрощают передачу параметров. Вложенная функция имеет доступ ко всем параметрам и некоторым или всем переменным в области действия внешней функции, поэтому внешняя функция не должна явно передавать кучу локального состояния во вложенную функцию.
33
ответ дан 24 November 2019 в 08:33
поделиться
Другие вопросы по тегам:

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