当前位置:   article > 正文

关于keil中的c语言和c++的混合编程_keil c c++混合编程

keil c c++混合编程
c语言编程简单,但是对于编写面向对象来说,实在是不方便。

一个工程是很多驱动文件的集合,底层驱动文件一般使用c语言来编写,但是一般数据封装和功能实现使用c++开发会更加方便。

所以在工程中使用c语言和c++混合编程是非常又必要的。

第一步先设置一下keil的c++编译环境,只需设计下面一步即可。


  1. a.h文件:
  2. #ifndef _A_
  3. #define _A_
  4. void funA();
  5. #endif
  6. a.c文件:
  7. #include "a.h"
  8. void funA()
  9. {
  10. }
  11. b.h文件:
  12. #ifndef _B_
  13. #define _B_
  14. class B
  15. {
  16. public:
  17. void funB();
  18. }
  19. #endif
  20. b.cpp文件:
  21. #include "b.h"
  22. #include "a.h"
  23. void B::funB()
  24. {
  25. funA();
  26. }
  27. 上面2文件是cpp文件里面调用了c文件的函数,这样显然是行不通的。
  28. 我们需要把要调用的函数定义和声明的地方添加 extern “C”
  29. a.h文件:
  30. #ifndef _A_
  31. #define _A_
  32. extern “C” void funA();
  33. #endif
  34. a.c文件:
  35. #include "a.h"
  36. extern “C” void funA()
  37. {
  38. }
  39. 这样cpp文件去调用c文件的函数就没有问题了,当然在c文件中去使用cpp文件的对象也是ok的。
  40. c.h文件:
  41. #ifndef _C_
  42. #define _C_
  43. extern “C” void funC();
  44. #endif
  45. c.c文件:
  46. #include "c.h"
  47. #include "b.h"
  48. extern “C” void funC()
  49. {
  50. B a;
  51. a.funB();
  52. }
  53. main函数
  54. #include "b.h"
  55. void main()
  56. {
  57. B a;
  58. a.funB();
  59. }
2018-1-5结

到这里kiel中的c和c++混合编程完成

不过最近我发现了一个bug,那就是stm32的定时器用不了,一用程序就会死掉。目前还不知道是什么原因。

2018-1-6结

结果寻找原因和验证,发现是因为中断函数使用c++编译时无法被找到的,所有导致中断函数指针为不可描述的初始地址

导致程序无法执行(死机)。需要在中断函数前加上 extern "C" 即可。

2018-1-9结

使用c++编译,所有的中断函数都需加上 extern "C"

2018-1-9结

使用c++编译,所有c文件调用的c函数都需加上 extern "C"


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/1004329
推荐阅读
相关标签
  

闽ICP备14008679号