호출 스택
void Func1()
{
cout << "Func1" << endl;
Func2(1, 2);
}
void Func2(int a, int b)
{
cout << "Func2" << endl;
Func3(10);
}
void Func3(float a)
{
cout << "Func3" << endl;
}
int main()
{
cout << "Main" << endl;
Func1(); // 에러 발생!!
}
위 코드를 실행하면 "Func2 식별자를 찾을 수 없습니다." 라는 에러 메시지가 나온다.
왜냐하면 cpp은 맨 위에서부터 아래로 내려가면서 순차적으로 분석하기 때문이다.
따라서 Func1을 분석할 때, Func2를 보지 못했기 때문에 Func2를 찾을 수 없다는 메시지가 나온다.
void Func1()
{
cout << "Func1" << endl;
// push 2
// push 1
// call Func2
Func2(1, 2);
}
위처럼 어셈블리어로 살펴보면 call할 때, Func2가 정의되어 있지 않기 때문에 에러가 발생하는 것이다.
그럼 매번 함수끼리 순서를 맞춰야 할까?
실수하기 쉽고 복잡하기 때문에 불가능하다. 따라서 함수 선언을 이용한다.
함수 선언
void Func1();
void Func2(int, int); // 매개변수에 이름을 안 적어도 된다.
void Func3(float damage); // 하지만 이름을 적으면 가독성이 좋다.
void Func1()
{
cout << "Func1" << endl;
Func2(1, 2);
}
void Func2(int a, int b)
{
cout << "Func2" << endl;
Func3(10);
}
void Func3(float a)
{
cout << "Func3" << endl;
}
int main()
{
cout << "Main" << endl;
Func1();
}
매번 함수 순서를 맞추는 힘든 과정을 거치지 않고, 위처럼 함수 선언을 통해서 미리 정의를 해놓는다.
출처
https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
시리즈를 원활하게 학습하기 위한 기초적인 C++ 문법들에 대해 학습합니다. 어셈블리 언어부터 시작해서 기본 C++ 문법, STL, C++11까지 핵심적인 내용을 압축해서 다루게 됩니다., - 강의 소개 | 인
www.inflearn.com
'프로그래머 > CPP_강의정리' 카테고리의 다른 글
cpp 값 전달 방식 (0) | 2021.09.13 |
---|---|
cpp 함수 TIP과 구조체 (0) | 2021.09.09 |
cpp rand와 상수 (0) | 2021.09.08 |
cpp 입출력과 네임스페이스 (0) | 2021.09.05 |
cpp 반복문 (0) | 2021.09.05 |