본문 바로가기
VisualStudio.C++.C#/C . C++

C/C++. C 에서 C++ 함수 호출하기. extern "C" 선언. C++ 에서 C함수 호출.

by 리치굿맨 2020. 1. 24.

 

 

C 에서 C++ 함수 호출

 

C와 C++ 이 혼재된 프로젝트에서 C++ 에서 정의된 함수를  C 에서 호출하는 방법. 

C++ 측에 C에 노출시킬 함수에 extern "C"  선언 추가된것은 C에서 호출가능함.  

 

 

/// C++ mycpp.cpp 측 코드.

void function(void)
{

}

//상기 함수를 C측에 노출시키는 함수 추가 작성. 

extern "C" void c_function(void)
{
 function(); 
}

// C++측 헤더 파일 mycpp.h 에는 위 함수 선언 추가하지 않는다. 
// extern "C" void c_function(void);  <- 이것 기록하면 안됨. 

//////////////////////////////

// C측에서 C++ 에서 extern "C" 로 노출시킨 함수 호출. 

c_function(); // C++ 측에서 extern "C" 로 선언된 것 호출가능. 


 

 

 

C/C++ 에서 함수 정의시 명시하지 않아도 기본 extern 형식이며 해당 함수의 scope은 해당 파일외부에서도 접근가능하다. 

해당 파일에서만 접근가능하게 제한하려면 함수 정의에 static 추가한다. 

 

C++ 에서 함수 정의시 extern 명시 하지 않아도 기본 extern 으로 처리되는데 실제 정확한 의미는 extern "C++" 이다. 즉 C++ 규약의 naming mangling 한다는 의미. C에서는 접근불가함. 

extern "C" 로  함수정의하면 C 에서도 접근가능하게 됨. 

 

 

 

 

C++ 에서 C 함수 호출. 

 

C++ 측에서 호출할 C 함수 선언시 extern "C" 로 감싼다. 

 

// C++ 에서 C함수 호출. 

// C 함수 여러 개  .
extern "C" {
    void func1(void);
    uint8_t func2(void); 
}

// C 함수 1개 단위로 
extern "C" void func1(void); 



func1(); // C++ 에서 C 함수 호출. 



 

 

 

 

연관

 

 

KEIL. 임베디드 프로젝트에서 C++ 활용

KEIL 에서는 C 뿐만 아니라 C++ 컴파일러도 포함되어있고, C와 C++ 혼재된 프로젝트 구성가능하며, KEIL 에서 특별한 설정을 하지 않고 현재 작업 중인 KEIL 프로젝트에서 확장자 cpp 인 C++ 소스파일 추가하면 해..

igotit.tistory.com


첫 등록 : 2020년 1월 24일 

최종 수정 : 

단축 주소 : https://igotit.tistory.com/2452

 


 

태그

, ,

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT