본문으로 건너뛰기

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>
}