C調(diào)用C++代碼的方法步驟
有時(shí)C程序里需要用到C++的類,但是C語(yǔ)言又不能直接調(diào)用類,這時(shí)需要把C++的類使用C接口封裝后,再調(diào)用,
可以將封裝后的C++代碼編譯成庫(kù)文件,供C語(yǔ)言調(diào)用;
需要注意的是,封裝的C++代碼庫(kù)文件是用g++編譯的,所以在C中調(diào)用時(shí),需要添加extern "C"{}關(guān)鍵字。
編譯c代碼時(shí),要加上-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; }
編譯的時(shí)候,為了簡(jiǎn)單,我這里沒(méi)有編譯成庫(kù)文件,直接用引用.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
編譯運(yùn)行結(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++
運(yùn)行:
./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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言中的強(qiáng)符號(hào)和弱符號(hào)介紹
這篇文章主要介紹了C語(yǔ)言中的強(qiáng)符號(hào)和弱符號(hào)介紹,本文用多個(gè)實(shí)例來(lái)講解強(qiáng)符號(hào)和弱符號(hào),需要的朋友可以參考下2015-03-03C++中字符串全排列算法及next_permutation原理詳解
這篇文章主要為大家詳細(xì)介紹了C++中字符串全排列(遞歸法)和(迭代法)以及next_permutation底層原理,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-02-02C++實(shí)現(xiàn)有向圖鄰接表的構(gòu)建
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)有向圖鄰接表的構(gòu)建,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04