cancel
Showing results for 
Search instead for 
Did you mean: 

C++ support of stm32cubeide does not work.

yujin
Associate II

in default situation, you could not call c++ function in C file. 

So the main.c  is not suitable file in C++ project.

 

if user choose C++ project,the generated main.c ,stm32h7xx_it.c should sufixed with .cpp.

3 REPLIES 3
Ghofrane GSOURI
ST Employee

Hello @yujin 

Please check this C++ Project on STM32CubeIDE - STMicroelectronics Community

and There is a plan to allow STM32cubeMX for generatin... - STMicroelectronics Community ,

it may help you solve the issue .

THX

Ghofrane

 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Andrew Neil
Super User

@yujin wrote:

in default situation, you could not call c++ function in C file. 


Did you provide the appropriate extern "C" declaration?

https://stackoverflow.com/questions/1041866/what-is-the-effect-of-extern-c-in-c

 

 

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.

main.c:

 

extern "C" void c_function_in_cpp_file(); int main(void) { c_function_in_cpp_file(); while(1) { } }

 

cpp_file.cpp:

 

void cpp_function_in_cpp_file() { } extern "C" void c_function_in_cpp_file() { cpp_function_in_cpp_file(); //function can be linked to C code, but can execute C++ code }

 

You make a header file compatible with both C and C++ by using:

cpp_file.h:

 

#ifdef __cplusplus //c++ class definitions etc. invisible to C files including this header #endif #ifdef __cplusplus extern "C" { #endif //functions that can be called by both C and C++ #ifdef __cplusplus } #endif

 

Kudo posts if you have the same problem and kudo replies if the solution works.
Click "Accept as Solution" if a reply solved your problem. If no solution was posted please answer with your own.