Как уже упоминалось в других ответах, стандартные C и C ++ не позволяют вам определять вложенные функции. (Некоторые компиляторы могут разрешить это как расширение, но я не могу сказать, что видел его использованным).
Вы можете объявить другую функцию внутри функции, чтобы ее можно было вызывать, но определение этой функции должно существовать вне текущей функции:
#include <stdlib.h>
#include <stdio.h>
int main( int argc, char* argv[])
{
int foo(int x);
/*
int bar(int x) { // this can't be done
return x;
}
*/
int a = 3;
printf( "%d\n", foo(a));
return 0;
}
int foo( int x)
{
return x+1;
}
Объявление функции без явного «спецификатора связи» имеет extern
связь. Таким образом, хотя объявление имени foo
в функции main()
ограничено main()
, оно будет ссылаться на функцию foo()
, которая будет определена позже в файле (или в другом файле, если это где foo()
определяется).