본문 바로가기
프로그래밍 놀이터/C, C++, C#, VB

[C/C++] extern "C" 에 대해 알아봅니다.

by 돼지왕 왕돼지 2012. 4. 5.
반응형


안녕하세요 돼지왕왕돼지입니다.

JNI 에 대해 학습하면서 extern "C" 라는 녀석을 보게 되었습니다. 그래서 오늘은 extern "C" 가 뭐하는 녀석인지에 대해 알아보겠습니다.


extern "C" 넌 뭐 하는 녀석이냐?

컴파일러는 링커가 링킹작업을 하도록 합니다. 이 링킹에서는 함수들에 관련된 정보를 오브젝트 파일에 기록하여 상호 호출이 가능하도록 하며, 이러한 정보를 linkage 라고 합니다. 


이 링킹작업은 C와 C++ 을 혼합하여 사용했을 때 문제가 생길 수 있습니다. C와 C++의 링킹방식이 다르기 때문입니다. 링킹작업을 할 때, 함수명, 변수명 등의 앞뒤에 _ 등의 추가적인 symbol 을 붙이거나, 추가정보를 덧붙여 표시하는데, 이런 추가작업의 방식이 다릅니다.

C는 함수의 이름이 유일하기 때문에 (overloading 미지원) 함수 앞에 _ 등의 심볼만을 붙이면 됩니다. 하지만 C++는 overloading 을 지원하기 때문에, 같은 이름의 함수가 여러개 있을 수 있고, 이에 따라 링킹시 추가적인 정보들을 넣어주어야 합니다. 이 추가정보를 mangled name 이라고 하며, 인자의 갯수, 데이터형에 대한 정보가 추가로 들어가는 것입니다.

결론적으로 C와 C++을 혼합하여 사용하는 프로그램에서는 링킹시 함수명을 각각의 방식으로 찾을 수 있도록 C인지, C++ 인지를 명시해주어야 합니다. 이 때 extern "C" 가 링킹에 대한 지시자 역할을 합니다. extern "C" 를 써주면, C 의 링킹 방식을 사용하라고 컴파일러에게 지시하는 것이죠.



 출처 : 
http://jimbo73.egloos.com/1486292




반응형

댓글