2010-06-05 4 views
1
  1. 난 그냥 그 ANSI (ISO) 우연히 내가 (예 :가 발생 필요한 이유)이 기능을 구현 GNU C 이토 무엇이 알고 싶은 기능의 중첩 .. 을 허용하지 않습니다.중첩 된 함수가

  2. (a()가 다른 함수에서 with (b())와 정의 된 경우 a의 수명이 전체 프로그램이됩니까?

  3. 함수 a()에 대한 저장은 함수 b()에 할당 된 스택에서 생성됩니까?

답변

1

저는 http://en.wikipedia.org/wiki/Nested_function이 귀하의 질문 # 1의 대부분을 답변한다고 생각합니다. 질문 # 2는 http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html으로, 질문 # 3은 http://gcc.gnu.org/onlinedocs/gccint/Trampolines.html에 자세히 나와 있습니다.

편집 : (제외) 위키 피 디아 문서는 알수없는 중첩 된 기능을 지원 ALGOL 기반 언어의 목록 떨어져 PL/M을 떠났다. 아, 좋은 옛날.

+0

고맙습니다. :) – Tarun

1

1) 매우 주관적입니다. 단서가 아닙니다. :-)

2) 아니오. 내부 기능의 수명은 외부 기능의 수명으로 제한됩니다. GCC documentation on nested functions을 참조하십시오. 내부 함수에 대한 포인터를 유지하고 외부 함수가 반환 된 후에 호출하면 나쁜 일이 발생할 수 있습니다.

3) 내부 함수는 다른 함수와 마찬가지로 자체 스택 공간을 할당합니다. 그것은 재귀 호출을 지원하기 위해 자체 공간을 할당해야합니다.

+0

2) 아니요, 내부 함수의 수명은 외부 함수의 수명으로 제한됩니다. 그렇지만 내부 함수의 할당은 외부 함수 스택에 있어야합니다. 그러면 외부 함수가 반환 될 때 전체 스택 프레임이 외부 함수에 할당되었으므로 내부 함수도 파괴됩니다. – Tarun

+0

@ user359179 : 응? –

+0

hmmmmm 뭐가 잘못 됐나요? – Tarun