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