C調(diào)用C++代碼的方法步驟
有時C程序里需要用到C++的類,但是C語言又不能直接調(diào)用類,這時需要把C++的類使用C接口封裝后,再調(diào)用,
可以將封裝后的C++代碼編譯成庫文件,供C語言調(diào)用;
需要注意的是,封裝的C++代碼庫文件是用g++編譯的,所以在C中調(diào)用時,需要添加extern "C"{}關(guān)鍵字。
編譯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函數(shù),調(diào)用封裝的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
編譯運行結(jié)果如下:
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
到此這篇關(guān)于C調(diào)用C++代碼的方法步驟的文章就介紹到這了,更多相關(guān)C調(diào)用C++內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++?Qt?TreeWidget?單層樹形組件應(yīng)用小結(jié)
TreeWidget?目錄樹組件,該組件適用于創(chuàng)建和管理目錄樹結(jié)構(gòu),在開發(fā)中我們經(jīng)常會把它當(dāng)作一個升級版的ListView組件使用,本文將通過TreeWidget實現(xiàn)多字段顯示,并增加一個自定義菜單,通過在指定記錄上右鍵可彈出該菜單并對指定記錄進(jìn)行操作2021-11-11
C語言中isdigit()函數(shù)和isxdigit()函數(shù)的用法
這篇文章主要介紹了C語言中isdigit()函數(shù)和isxdigit()函數(shù)的用法,用來判斷字符師傅為阿拉伯?dāng)?shù)字和16進(jìn)制數(shù)字,需要的朋友可以參考下2015-08-08
C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介
這篇文章主要介紹了C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù),包括bcopy()函數(shù)和bzero()函數(shù)以及bcmp()函數(shù),需要的朋友可以參考下2015-08-08
C語言進(jìn)階教程之字符串&內(nèi)存函數(shù)
對于字符,在計算機(jī)內(nèi)部都是用數(shù)字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關(guān)于C語言進(jìn)階教程之字符串&內(nèi)存函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-09-09
最短時間學(xué)會基于C++實現(xiàn)DFS深度優(yōu)先搜索
常見使用深度優(yōu)先搜索(DFS)以及廣度優(yōu)先搜索(BFS)這兩種搜索,今天我們就來講講什么是深度優(yōu)先搜索,感興趣的可以了解一下2021-08-08
C++實現(xiàn)帶頭雙向循環(huán)鏈表的示例詳解
這篇文章主要介紹了如何利用C++實現(xiàn)帶頭雙向循環(huán)鏈表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-12-12

