重複の可能性:
Cの入れ子関数
Cでは、この構造でプログラムを作成した場合:
main ()
{
int function1(...)
{
....
}
}
function 2()
{
function1(...)
}
main関数内に記述されたfunction2からfunction1を呼び出すことは可能ですか?また、Cではすべての関数がグローバルですか?または、ある関数から別の関数を呼び出せないという制限がありますか?
C では関数定義をネストできません。
int main(void)
{
int function1(void)
{
/* ... */
}
}
上記の定義はfunction1
無効です。
編集
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