🏷️C는 왜 C++과 달리 오버로딩이 안될까?
- 이를 이해하려면, 먼저 Name Mangling개념을 알아야 한다.
- Name Mangling은 쉽게 말해, 링커에게 추가적인 정보를 제공하기 위해 컴파일 시 함수(언어적 개체)의 명칭을 변경하는 기법이다.
- C언어는 컴파일 시 함수 명칭(식별자) 앞에
_
(under score)를 붙이게 된다.
- 예를 들면, 함수
printf
는 _printf
로 이름이 변경되는 식이다.
- 여기서 한 가지 중요한 사실이 있는데,
- C언어에서는 함수의 매개변수 타입과 개수(매개변수에 대한 정보)를 반영하지 않는다는 것이다.
- 즉,
foo
라는 함수는 매개변수가 몇개든, 어떤 타입이든 상관없이 언제나 _foo
로 변경된다.
- 그러나, C++은 컴파일 시 매개변수 타입과 개수를 반영하여 Name Mangling을 한다.
- 이는 사실상, 매개변수 정보에 따라 다른 함수가 존재하는 셈이 되기에 C++에선 오버로딩이 가능해지는 것이다.