赞
踩
以前的代码都是用c语言来写的,后来又接触了功能更强大的c++,就想尝试c与c++混编,通过cubemx生成。
在必要的c文件中添加 ,让其能够编译。这个代码中__cplusplus是cpp中的定义的宏,假设编译器启用的c++形式编译,这个宏就会跳进去,“extern "C" { ”说明编译器用C语言的模式编译,关于c语言的内容就放里面。
- #ifdef __cplusplus
- extern "C" {
-
- #endif
然后编译下来的结果,报了20个错。
看了一眼,报错文件都是FreeRTOS的文件,问题主要出在了 void* (无类型指针上面)上面。一个无类型指针(void*
)是一种通用的指针类型,可以指向任何数据类型的地址,因此在编译时不会执行类型检查。由于无类型指针丢失了类型信息,编译器无法确定指针指向的数据类型,从而导致一些潜在的问题。但是FreeRTOS用c语言形式编译的时候,void* 是合法的,换到c++来编译就报错了,这是因为FreeRTOS是用c语言来写的,但是FreeRTOS的代码又不能改,我就不得不想其他办法了(但其实也试过使用 static_cast 但是没什么用,还报了其他错误)。
既然FreeRTOS不支持C++编译,那我就不用c++去编译FreeRTOS文件不就行了吗。
这里的全局没有变,关键的是多加一步。在cubemx生成的FreeRTOS文件上。
在工程目录下鼠标左键选中FreeRTOS文件组,右键单击选择Options for 'XX'
在Misc Control中加入 --c99
再次编译。
完成以上步骤,就可以正常在FreeRTOS中运行C++11的程序了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。