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

 更新时间:2021年11月04日 16:12:56   作者:fensnote  
本文主要介绍了C调用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("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++内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++事件处理中的__hook与__unhook用法详解

    C++事件处理中的__hook与__unhook用法详解

    这篇文章主要介绍了C++事件处理中__hook与__unhook的用法,C++中的COM类主要支持事件处理,需要的朋友可以参考下
    2016-01-01
  • C++实现简单计算器功能

    C++实现简单计算器功能

    这篇文章主要为大家详细介绍了C++实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C/C++ Qt TreeWidget 单层树形组件应用小结

    C/C++ Qt TreeWidget 单层树形组件应用小结

    TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,本文将通过TreeWidget实现多字段显示,并增加一个自定义菜单,通过在指定记录上右键可弹出该菜单并对指定记录进行操作
    2021-11-11
  • C语言中isdigit()函数和isxdigit()函数的用法

    C语言中isdigit()函数和isxdigit()函数的用法

    这篇文章主要介绍了C语言中isdigit()函数和isxdigit()函数的用法,用来判断字符师傅为阿拉伯数字和16进制数字,需要的朋友可以参考下
    2015-08-08
  • OpenCV实现简易标定板

    OpenCV实现简易标定板

    这篇文章主要为大家详细介绍了OpenCV实现简易标定板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C语言中字符串的内存地址操作的相关函数简介

    C语言中字符串的内存地址操作的相关函数简介

    这篇文章主要介绍了C语言中字符串的内存地址操作的相关函数,包括bcopy()函数和bzero()函数以及bcmp()函数,需要的朋友可以参考下
    2015-08-08
  • C语言递归思想实现汉诺塔详解

    C语言递归思想实现汉诺塔详解

    大家好,本篇文章主要讲的是C语言递归思想实现汉诺塔详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C语言进阶教程之字符串&内存函数

    C语言进阶教程之字符串&内存函数

    对于字符,在计算机内部都是用数字(字符编码)来表示的,而字符串是“字符连续排列”的一种表现,这篇文章主要给大家介绍了关于C语言进阶教程之字符串&内存函数的相关资料,需要的朋友可以参考下
    2021-09-09
  • 最短时间学会基于C++实现DFS深度优先搜索

    最短时间学会基于C++实现DFS深度优先搜索

    常见使用深度优先搜索(DFS)以及广度优先搜索(BFS)这两种搜索,今天我们就来讲讲什么是深度优先搜索,感兴趣的可以了解一下
    2021-08-08
  • C++实现带头双向循环链表的示例详解

    C++实现带头双向循环链表的示例详解

    这篇文章主要介绍了如何利用C++实现带头双向循环链表,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-12-12

最新评论