OverLoading , 컴파일 4단계,네임맹글링
C++ 에서는 함수는 특정 상황에서 이름이 겹치는것을 허용 한다.
void Func()
{
}
void Func(int Number)
{
}
int main()
{
Func();
Func(10);
}
둘의 함수명은 같지만 실행은 문제 없이 된다.(형태까지 완전히 같으면 불가능)
위의 코드에서 알수있듯이 인자값이 달라지면 함수명이 같더라도
컴파일러는 다른 함수라고 보는것이다.
이를 OverLoding 이라고 부른다.
컴파일 4단계 : 전처리기 -> 컴파일러 -> 어셈블러 -> 링커
전처리기 | 코드의 쓸모있는 부분만을 남긴다 |
컴파일러 |
코드의 쓸모있는 부분을 인간의 언어가 아닌 중간 언어로 바꾼다. |
어셈블러 | 중간언어를 기계어로 변경 |
링커 |
완전히 바이너리로 바꾼다. |
컴파일러와 어셈블러에서 함수나 변수의 이름이
바뀌는 현상관 규칙을 네임맹글링 이라고 한다.
이 과정에서 Func() 함수의 이름과 Func(int Number) 함수의 이름이 같지 않기때문에
사용이 가능한것을 알 수 있다. 쉽게 생각하면 컴파일러는 Func()의 이름은 Func로
Func(int Number)의 이름은 Funcint 이런식으로 갖는다고 생각하면 된다.
이를 잘 생각해보면 함수의 이름이 같고 인자의 갯수도 같지만 인자의 자료형이 다르면
문제없이 실행된다는 것을 알 수 있다.
함수의 이름이 같고 함수의 리턴값이 다르다고 사용 가능하지 않다
->함수의 리턴값은 네임맹글링에 포함되지 않는다 !