2

重複の可能性:
Cの入れ子関数

Cでは、この構造でプログラムを作成した場合:

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

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

main関数内に記述されたfunction2からfunction1を呼び出すことは可能ですか?また、Cではすべての関数がグローバルですか?または、ある関数から別の関数を呼び出せないという制限がありますか?

4

2 に答える 2

3

C では関数定義をネストできません。

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

上記の定義はfunction1無効です。

于 2013-01-09T13:26:54.593 に答える
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
于 2013-01-09T13:27:17.500 に答える