прототипы функций в основной функции?

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

В основной функции мы обычно вызываем такие функции:

int abc(int some)
{
  return x;
}

int main()
{
  int x = 10;
  abc(x); //calling function abc inside main function.
  return 0;
}

но сегодня, глядя на пример кода, я увидел что-то вроде этого:

int main()
{
  int abc(int x); // which compiled fine 
}

который работает, но единственное, что я пытаюсь понять, это то, что такое использование таких утверждений?

  1. Мы не можем определить функцию внутри основной функции.
  2. Мы можем вызывать функции внутри основной функции.
  3. но этот больше похож на прототип функции, который также объявляется вне всех функций в начале программных файлов c.

person Deepak    schedule 03.07.2014    source источник


Ответы (2)


Это вопрос масштаба. Вы можете объявить прототип функции внутри файла main. Все дело в том, что его можно будет вызвать только внутри основного, и больше нигде. И фактический код функции будет за пределами main method.

Итак, во втором примере, где int abc(int x); находится внутри main, функция abc может быть вызвана только внутри основной функции.

person AntonH    schedule 03.07.2014

Объявление int abc(int x); действительно является прототипом функции. Хотя, безусловно, мы не можем определить функцию внутри основной функции, мы можем сказать компилятору, что функция существует внутри другой функции, что и делает прототип.

Хотя вы, безусловно, можете объявить функцию внутри функции, польза от такого способа определенно ограничена: все внешние функции в C принадлежат глобальному пространству имен (хотя их видимость ограничена областью, охватывающей область имен). объявление прототипа), поэтому скрытие прототипа внутри функции обычно не требуется.

person Sergey Kalinichenko    schedule 03.07.2014
comment
Они не принадлежат глобальному пространству имен. Их объем соответствует объему окружающего блока. - person mafso; 04.07.2014
comment
@mafso Он имеет в виду, что сама функция имеет внешнюю связь и не имеет какой-либо области действия, определяющей ее определение. - person M.M; 04.07.2014
comment
@MattMcNabb: я думаю, что dasblinkenlight не имел в виду ничего плохого, но я думаю, что формулировка вводит в заблуждение. Для меня «пространство имен» на самом деле означает «область действия» (когда речь идет о C). Я думаю, что ответ AntonH лучше описывает это (т.е. каковы различия в объявлении области файла). - person mafso; 04.07.2014