暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C调用C++代码

嵌入式技术笔记 2019-01-08
538

有时C程序里需要用到C++的类,但是C语言又不能直接调用类,这时需要把C++的类使用C接口封装后,再调用,


可以将封装后的C++代码编译成库文件,供C语言调用;


需要注意的是,封装的C++代码库文件是用g++编译的,所以在C中调用时,需要添加extern "C"{}关键字。


编译c代码时,要加上-lstdc++

如下代码,是c代码使用C++的map容器的例子:main函数,调用封装的C++接口:

如下代码,是c代码使用C++的map容器的例子:

  1. //test.cpp 封装C++代码

  2.  

  3.  

  4. #include <map>

  5. #include <iostream>

  6. #include "test.h"

  7.  

  8. using namespace std;

  9.  

  10. static map<int, int> m_testMap;

  11.  

  12.  

  13. void pushVal(int key, int val)

  14. {

  15. m_testMap[key] = val;

  16. }

  17.  

  18.  

  19. int getVal(int key)

  20. {

  21. map<int, int>::iterator iter = m_testMap.find(key);

  22. if (iter != m_testMap.end() )

  23. {

  24. return iter->second;

  25. }

  26.  

  27. return  -1;

  28. }

  29.  

  30. //头文件 test.h

  31.  

  32. #ifndef _TEST_H_

  33. #define _TEST_H_

  34.  

  35. #ifdef __cplusplus

  36. extern "C" {

  37. #endif

  38.  

  39. void pushVal(int key, int val);

  40. int getVal(int key );

  41.  

  42.  

  43. #ifdef __cplusplus

  44. }

  45. #endif

  46.  

  47.  

  48. #endif


main函数调用:

编译的时候,为了简单,我这里没有编译成库文件,直接用引用.o编译的:

makefile:

编译运行结果如下:

这样在c代码里就可以使用map模板了,如果想使用实例化多个map,需要在封装代码里返回一个句柄,代表是哪个map实例;


文章转载自嵌入式技术笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论