C에서 C++ 함수 호출하기
extern "C"
C++에서 extern "C"
를 사용하여 전역 변수나 함수를 선언하는 방식은 아래와 같습니다.
extern "C" int x;
extern "C" float func();
또는
extern "C" {
extern int x;
float func();
}
C에서 C++ 함수 호출
C++의 모든 함수를 호출 할 수 있는 것은 아닙니다. C에서 사용할 함수는 C 스타일로 작성을 해야하고 C 컴파일러는 extern "C"
지시자를 해석할 수 없으므로 __cplusplus
매크로를 사용하여 가려야 합니다.
예를 들어 void setup()
와 void loop()
함수를 만들고 내부는 C++ 코드를 사용하여 작성하고, 호출은 C에서 한다고 가정하면 아래와 같이 선언과 정의를 구현할 수 있습니다.
bridge.h
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "main.h"
void setup();
void loop();
#ifdef __cplusplus
}
#endif
bridge.cpp
#include "bridge.h"
void setup() {
// C/C++ 코드 사용
}
void loop() {
// C/C++ 코드 사용
}
main.c
...
#include "bridge.h"
/* USER CODE END Header */
...
int main() {
/* USER CODE BEGIN 2 */
setup();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
loop();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
...
C++에서 C 함수 호출
main.cpp
extern "C" {
#include <c_header.h>
}