加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

C调用C++代码的方法步骤

发布时间:2021-11-09 15:26:38 所属栏目:教程 来源:互联网
导读:有时C程序里需要用到C++的类,但是C语言又不能直接调用类,这时需要把C++的类使用C接口封装后,再调用, 可以将封装后的C++代码编译成库文件,供C语言调用; 需要注意的是,封装的C++代码库文件是用g++编译的,所以在C中调用时,需要添加extern C{}关键字。
有时C程序里需要用到C++的类,但是C语言又不能直接调用类,这时需要把C++的类使用C接口封装后,再调用,
 
可以将封装后的C++代码编译成库文件,供C语言调用;
 
需要注意的是,封装的C++代码库文件是用g++编译的,所以在C中调用时,需要添加extern "C"{}关键字。
 
编译c代码时,要加上-lstdc++
 
如下代码,是c代码使用C++的map容器的例子:
 
//test.cpp 封装C++代码
 
 
#include <map>
#include <iostream>
#include "test.h"
 
using namespace std;
 
static map<int, int> m_testMap;
 
 
void pushVal(int key, int val)
{
 m_testMap[key] = val;
}
 
 
int getVal(int key)
{
 map<int, int>::iterator iter = m_testMap.find(key);
 if (iter != m_testMap.end() )
 {
  return iter->second;
 }
 
 return  -1;
}
 
//头文件 test.h
 
#ifndef _TEST_H_
#define _TEST_H_
 
#ifdef __cplusplus
extern "C" {
#endif
 
void pushVal(int key, int val);
int getVal(int key );
 
 
#ifdef __cplusplus
}
#endif
 
#endif
main函数,调用封装的C++接口:
 
//main.c
 
#include <stdio.h>
#include "test.h"
 
 
 
int main()
{
 printf("testn");
 for (int i = 0; i < 10; i++)
 {
  printf("push key: %d, val: %dn", i, i*10);
  pushVal(i, i*10);
 }
 
 int val = 0;
 for (int i = 0; i < 10; i++)
 {
  val = getVal(i);
  printf("get key: %d, val: %dn", i,val);
 }
 return 0;
}
编译的时候,为了简单,我这里没有编译成库文件,直接用引用.o编译的:
 
makefile:
 
all:
 g++ -Wall -c  test.cpp -o test.o
 gcc -Wall -c  main.c -o main.o
 
 gcc -Wall test.o main.o -o test -lstdc++
 
clean:
 rm test *.o
 
编译运行结果如下:
 
make
g++ -Wall -c  test.cpp -o test.o
gcc -Wall -c  main.c -o main.o
gcc -Wall test.o main.o -o test -lstdc++
运行:
./test
test
push key: 0, val: 0
push key: 1, val: 10
push key: 2, val: 20
push key: 3, val: 30
push key: 4, val: 40
push key: 5, val: 50
push key: 6, val: 60
push key: 7, val: 70
push key: 8, val: 80
push key: 9, val: 90
get key: 0, val: 0
get key: 1, val: 10
get key: 2, val: 20
get key: 3, val: 30
get key: 4, val: 40
get key: 5, val: 50
get key: 6, val: 60
get key: 7, val: 70
get key: 8, val: 80
get key: 9, val: 90
 
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!