헤더파일

C++ name mangling 본문

C++

C++ name mangling

헤더파일 2020. 3. 11. 17:30

name mangling

 

 c++에서 지원하는 함수 오버로딩은 같은 함수이름으로 여러 타입을 지원하게 해주지만 어셈블리에서는 함수이름 하나당 하나의 정의만 가능하기 때문에 컴파일 하게 되면 오버로드된 함수에 따라 함수이름이 변하게 됩니다.

이러한 현상을 name mangling 이라고 합니다.

 

 c 파일과 cpp 파일을 동시에 컴파일 한다면  name mangling 현상 때문에 오류가 발생합니다. cpp 컴파일러와 c 컴파일러가 같은 함수라도 어셈블리 형태가 다르기 때문인데 이럴 경우 아래와 같은 전처리기를 사용하여 해결합니다.

 

#indef __cplusplus
extern "C"
{
#endif

// 함수들


#indef __cplusplus
}
#endif

 .c 파일에 정의된 printf 함수를 cpp에서 사용할 때 오류가 나지 않는 이유도 stdio.h 헤더가 extern "C"를 정의하였기 때문입니다. 

 

 

'C++' 카테고리의 다른 글

C++17 if 초기화, if constexpr, 구조체 바인딩  (1) 2020.03.23
c++ Trivial  (2) 2020.03.19
C++ 상수 멤버 함수 operator new 재정의  (0) 2020.03.11
C++ 멤버함수  (0) 2020.03.09
캐스팅 정리  (0) 2019.11.17
Comments