2008. 7. 23. 10:58ㆍProgramming 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언어의 스펙에 따라 함수 이름을 사용하도록 컴파일러에게 지시하는 역할을 합니다.