C 언어와 C++ 언어 간의 “이름 망글링(Name Mangling)” 방식 차이

By | 2026년 6월 29일
Table of Contents

C 언어와 C++ 언어 간의 "이름 망글링(Name Mangling)" 방식 차이

이름 망글링(Name Mangling)

C++ 은 함수 오버로딩을 지원하기 위해, 컴파일시 함수명을 복잡한 함수명으로 변경한다.
C 는 본래 함수명 그대로를 유지한다.

C++ 코드에서 C 함수를 사용하게 되면 컴파일러는 복잡하게 변경된 함수명 목록에서 원래의 함수명을 찾으려 한다.
하지만 C 에는 그런 테이블이 없으므로 오류가 발생한다.

이것을 해결하기 위해 C++ 컴파일러에게 이 함수는 원래의 함수명을 그대로 유지한채 컴파일되었음을 알려주어야 한다.

해결책

// c++ 에서 처리

extern "C" {
    #include "myheader.h"
}

C 코드에서 처리해주는 것이 더 표준이라고 한다.
헤더에서 처리하면 한번으로 끝나지만, C++ 에서 처리하면 헤더를 인클루드 하는 모든 파일에 작업을 해야하기 때문이다.

#ifdef __cplusplus
extern "C" {
#endif

void my_function(unsigned int pin, _ACPI_VALUE_* value);

#ifdef __cplusplus
}
#endif

답글 남기기