Page 131 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 131
그림 4-2에 함수의 호출과 실행 과정을 간단하게 나타냈습니다. 이 그림의 프로그램은 main
함수를 포함하여 총 4개의 함수로 이루어졌습니다.
void x() { /*...*/ }
a main 함수가 실행되기 전의 상태입니다.
void y() { /*...*/ } b main 함수를 실행합니다.
c z 함수를 호출합니다.
void z() { d x 함수를 호출합니다.
x(); e x 함수가 종료되고 z 함수로 돌아옵니다.
y();
} f y 함수를 호출합니다.
g y 함수를 종료하고 z 함수로 돌아옵니다.
int main() { h z 함수를 종료하고 main 함수로 돌아옵니다.
z(); i main 함수를 종료합니다.
}
main 함수를 푸시 z 함수를 푸시 x 함수를 푸시 x 함수를 팝
x
z z z
main main main main
a b c d e
y 함수를 푸시 y 함수를 팝 z 함수를 팝 main 함수를 팝
y
z z
main main main
f g h i
[그림 4-2] 함수 호출과 스택
가장 먼저 main 함수를 실행하며 main 함수는 z 함수를 호출합니다. 호출된 함수 z는 x 함수
와 y 함수를 순서대로 호출합니다. 이 그림은 함수를 호출할 때는 푸시하고 함수가 실행을 종
료하고 호출한 원래의 함수로 돌아갈 때는 종료할 함수를 팝하는 모습입니다.
그림 4-2의 d 를 살펴보겠습니다. 이 그림은 main → z → x의 순서대로 함수를 호출합니다.
이때 스택의 상태는 호출한 함수의 역순으로 겹겹이 쌓여 있어 함수 호출이 계층 구조로 이루
어져 있음을 알 수 있습니다. d 의 상태에서 x 함수의 실행이 종료되면 x 함수만 팝합니다. x
함수와 z 함수가 모두 팝되어 갑자기 main 함수로 돌아가는 일은 없습니다.
위 그림은 함수 호출을 이해하기 위해 간단히 나타낸 것이며, 스택은 실제로 더 복잡한 구조로 되어 있습니다.
04•스택과 큐 131