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
   126   127   128   129   130   131   132   133   134   135   136