我可以调用另一个函数编写的函数吗?

时间:2013-01-09 13:25:12

标签: c function scope

  

可能重复:
  Nested function in C

在C中,如果我在这个结构中写了一个程序:

main ()
{
  int function1(...)
  {
    ....
  }
}

function 2()
{
   function1(...)
}

可以从main函数中写入的function2调用function1吗? 并且: 在C中,所有功能都是全局的?或者在某些情况下有一些限制,从一个功能你不能再称为另一个功能?

2 个答案:

答案 0 :(得分:3)

您无法在C中嵌套函数定义。

int main(void)
{
  int function1(void)
  {
      /* ... */
  }
}

上述function1的定义无效。

答案 1 :(得分:0)

修改

在GNU C中可以嵌套函数。我尝试了这个小片段并且有效

#include <stdio.h>

int main()
{
    void printy() { printf("hallo\n"); }

    printy();
}

与GNU C页面声明http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

一样

嵌套函数的名称是定义它的块的本地名称

事实上,如果我将我的代码更改为

#include <stdio.h>

void func2();

int main()
{
    void printy() { printf("hallo\n"); }

    printy();

    func2();
}

void func2()
{
    printy();
}

我得到了

gcc test.c
/tmp/ccGhju4n.o: In function `func2':
test.c:(.text+0x3f): undefined reference to `printy'
collect2: ld returned 1 exit status