C는 왜 C++과 달리 오버로딩이 안될까?

MySprtlty·2022년 12월 30일
3

C

목록 보기
28/37

🏷️C는 왜 C++과 달리 오버로딩이 안될까?

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

0개의 댓글