1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
// 호출 스택
 
void Func1()
{
    cout << "Func1" << endl;
 
    Func2(12);
}
 
void Func2(int a, int b)
{
    cout << "Func2" << endl;
 
    Func3(10);
}
 
 
void Func3(float a)
{
    cout << "Func3" << endl;
 
}
 
int main()
{
    cout << "main" << endl;
    Func1();
 
    return 0;
}
cs

순서가 안 맞으면 빌드가 안 된다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
// 호출 스택
 
void Func3(float a)
{
    cout << "Func3" << endl;
 
}
 
 
void Func2(int a, int b)
{
    cout << "Func2" << endl;
 
    Func3(10);
}
 
 
void Func1()
{
    cout << "Func1" << endl;
 
    Func2(12);
}
 
 
int main()
{
    cout << "main" << endl;
    Func1();
 
    return 0;
}
cs

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
// 호출 스택
 
// 함수 선언
void Func1();
void Func2(int hp, int mp);  // 함수의 모양만 만들어주면 된다. 밑의 void Func2(int a, int b)처럼 a, b일 필요는 없다. 
void Func3(float a);
 
int main()
{
    cout << "main" << endl;
    Func1();
 
    return 0;
}
 
void Func1()
{
    cout << "Func1" << endl;
 
    // [Assembly Language] push 2
    // [Assembly Language] push 1
    // [Assembly Language] call Func2
    Func2(12);
 
    Func3(10.0f);
}
 
void Func2(int a, int b)
{
    cout << "Func2" << endl;
 
    Func3(10);
}
 
void Func3(float a)
{
    cout << "Func3" << endl;
 
}
 
cs