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
'VisualStudio.C++.C# > C . C++' 카테고리의 다른 글
C/C++. 윈도우. 파일 저장, 읽기 . FILE . fopen, fprintf, fscanf (0) | 2020.03.29 |
---|---|
C++ REST SDK. Json 형식 다루기 . (0) | 2020.03.22 |
C/C++. C 에서 C++ 함수 호출하기. extern "C" 선언. C++ 에서 C함수 호출. (0) | 2020.01.24 |
C. C++. 메모리 직접 접근 (0) | 2020.01.20 |
C/C++. & 와 * 메모리 접근 형변환 (0) | 2020.01.13 |
C/C++. 구조체 변수 선언 동시 멤버 초기화 (0) | 2020.01.10 |
댓글0