[[프로그래밍_NOTE]]/C , C++

extern "C"

갑빠돌격기 2012. 9. 1. 19:14

흔히 볼수 있는 아래의 코드는?

#ifdef _cplusplus

   extern "C"{

#endif

 

...

...

 

#ifdef _cplusplus

   }

#endif 

 

 

C++는 컴파일시 함수 이름을 모두 다른 이름으로 바꿔주기 때문에 C에서 컴파일된 함수를 링크시킬 때는 해당 함수의 선언부 혹은 include 부분에 extern "C"라는 키워드를 사용하여 해당 함수가 C로 컴파일된 함수라는 것을 컴파일러에게 명시적으로 알려줘야 한다.

( 쉽게 이야기하면 C로 컴파일된 함수를 C++ 에서 부를 수 없기에, 이를 가능하게 하는 기법이다. )

 

//exercise //
   ■ C++ 에서 C 에서 컴파일된 함수를 가져다 쓰려면?
      1. C를 컴파일하여 오브젝트 파일 생성 ( i.e : gcc -c CFile.c )
      2. C++ 에서 (1)에서 구현한 함수를 선언할 때, extern "C" 를 함수 선언시 붙여준다.
           ie) extern "C" void myfunc();
      3. C++ 에서 해당 함수를 사용.
  
// solution //

< CFile.c >

void myFunc()
{
        printf("Call myFunc() \n");
        return;
}

 

<CPPFile.cpp>

 #include<iostream>

 

using namespace std;

extern "C" void myFunc();

 

int main()
{
        myFunc();
        return 0;
}

 

$> gcc -c CFile.c

$> g++ -o mytest CPPFile.cpp CFile.o

$> ./mytest