文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

有时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("test\n");
 for (int i = 0; i < 10; i++)
 {
  printf("push key: %d, val: %d\n", 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: %d\n", 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

到此这篇关于C调用C++代码的方法步骤的文章就介绍到这了,更多相关C调用C++内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯