프로그래밍(~2017)

extern "C"

단세포소년 2011. 3. 2. 16:04
반응형
c에서 c++ 함수를 사용하거나 혹은 c++에서 c함수를 사용할때 각각의 언어는 컴파일시 함수이름 규약이 다르다.

예를 들어 int test()란 함수가 있다.

c에서는 컴파일시 test라고 함수 이름이 정해진다면

c++에서는 asdf@test 이런식으로 함수 이름이 다르게 지정된다. 이유는 c++의 다형성 때문이다.

이와 같이 c와 c++의 함수 이름 규약이 다르기 때문이다.

c++ 에서 함수 앞에 extern "C"를 선언해주면 c++ 컴파일러가 컴파일시 함수이름을 c함수 이름 규약으로 정해준다.

dll 파일에서 외부에서 호출 가능한 함수 정의시

#indef __cplusplus
extern "C"
{
#endif
//함수들.......
//함수들......
#indef __cplusplus
}
#endif

이런 식으로 외부에서 호출 가능한 함수들 앞과 뒤에 extern "C" { } 로 c형식으로 컴파일 되도록 알려준다. 

다시 생각해보면 범용적인 함수 호출은 c규약을 따른다고 생각하면 된다.



1. c 에서 c++ 함수 사용하기
c++ 함수 앞에 extern "C" 를 붙여준다.
예 >
c++파일
extern "C" int test()
{
.......;
}

c파일
int main()
{
test();
return 0;
}

2. c++에서 c함수 사용하기
c++에서 사용할 c의 함수 선언부 즉 헤더에 extern "C" 를 붙여준다.
예>
extern "C" int test();

즉 c++에게 test 함수는 c 함수 이름규약을 사용하고 있다는 것을 알려주는것이다.



%% extern "C"는  c컴파일러 규약이므로 다형성등 c++의 특징이 적용되지 않는다는 것을 알아두고 사용해야된다.


참고:
http://hermet.pe.kr/87864741

http://blog.naver.com/devils129?Redirect=Log&logNo=80013282472


반응형