2007년 3월 12일 월요일

extern "C"

C++은 특성상(오버로딩이나 기타등등) symbol에 name mangling을 사용한다. 때에 따라서 이러한 name mangleing을 사용하지 말아야 할 때가 있다. 이러한 것은 extern "C" 키워드를 사용하여 name mangling을 하지 말도록 컴파일러에게 알려줘야한다. 일반적으로 C/C++을 섞어서 쓸 경우가 있을 때(library 작업 등) 아래와 같이 쓰는 것이 괜찮을 듯 싶다.
#if defined(__cplusplus)
extern "C"
{
#endif

extern int doIt(const char* what);

#if defined(__cplusplus)
}
#endif
__cplusplus 라는 definition은 C++ 컴파일러가 암묵적으로 정의해놓은 것이다. (특별히 옵션 줄 필요 없음)
  1. extern "PASCAL" 파스칼 타입으로 name mangleing한다.
  2. extern "FORTRAN" 포트란 타입으로 name mangleing한다.

각기 언어와 C++간 협업을 할 때 쓰인다.