Name Mangling

2008. 7. 23. 10:58Programming Languages/C++

extern "C" name mangling을 방지하는 역할을 합니다.

name mangling이란 컴파일 시 함수이름 앞 또는 뒤에 언더바(_) 등을 덧붙이는 것을 말합니다. C++에서, 주로 오버로딩 함수들을 상호 구분하기 위해 함수이름 앞뒤에 특정 문자/숫자들을 컴파일러가 덧붙이게 됩니다. 굳이 오버로딩 함수가 아니더라도 함수이름 앞에 기본으로 언더바를 붙이기도 합니다. extern "C"는 이런 것들을 해당 함수에는 하지 말라고 일러주는 것입니다.

 

C++ 컴파일러는 C 컴파일러와 다르게,

프로그래머가 지정한 함수 이름을 그대로 사용하지 않습니다.

프로그래머가 Func()라는 이름으로 함수를 만들었다고 해도,

이 이름과 동일한 함수들을 C++에서는 만들 수 있죠.

어떤 Func()라는 함수는 정수를 인자로 받고, 또 어떤 Func()라는 함수는 실수를 인자로 받도록 만들 수 있는 것이죠.

이렇게 함수 이름이 동일한 여러개의 함수가 나타날 수 있기 때문에,

C++ 컴파일러는 내부적으로 Func라는 이름에다가 인자들의 타입 및 리턴타입으로 어떤 문자들을 덧붙여서, 각 함수들을 구분할 수 있도록 새로운 이름들을 만듭니다.

그런데 C언어는 함수이름을 그대로 사용하죠.

그렇다면 내 프로그램에서 만든 어떤 함수(인터페이스)를 다른 C언어 계열 프로그램에서 쓸 수 있게 하거나,

반대로 다른 C언어 계열로 만들어진 프로그램의 인터페이스를 가져다가 쓰기 위해서는 함수 이름을 그대로 사용해야 합니다.

extern "C"는 이렇게 C언어의 스펙에 따라 함수 이름을 사용하도록 컴파일러에게 지시하는 역할을 합니다.