最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++調(diào)用C接口的實現(xiàn)示例

 更新時間:2020年12月02日 08:35:30   作者:DeRoy  
這篇文章主要介紹了C++調(diào)用C接口的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

C++調(diào)用C代碼

一個C語言文件p.c

#include <stdio.h>
void print(int a,int b)
{
    printf("這里調(diào)用的是C語言的函數(shù):%d,%d\n",a,b);
}

一個頭文件p.h

#ifndef _P_H
#define _P_H

void print(int a,int b);

#endif

C++文件調(diào)用C函數(shù)

#include <iostream>
using namespace std;
#include "p.h"
int main()
{
    cout<<"現(xiàn)在調(diào)用C語言函數(shù)\n";
    print(3,4);
    return 0;
}

執(zhí)行命令

gcc -c p.c
g++ -o main main.cpp p.o

編譯后鏈接出錯:main.cpp對print(int, int)未定義的引用。

原因分析

  • p.c我們使用的是C語言的編譯器gcc進行編譯的,其中的函數(shù)print 編譯之后,在符號表中的名字為 _print
  • 我們鏈接的時候采用的是g++進行鏈接,也就是C++鏈接方式,程序在運行到調(diào)用 print函數(shù)的代碼時,會在符號表中尋找_print_int_int(是按照C ++的鏈接方法來尋找的,所以是找_print_int_int而不是找_print )的名字,發(fā)現(xiàn)找不到,所以會t提示“未定義的引用”
  • 此時如果我們在對print的聲明中加入 extern “C” ,這個時候,g ++編譯器就會按照C語言的鏈接方式進行尋找,也就是在符號表中尋找_print ,這個時候是可以找到的,是不會報錯的。

總結(jié)

編譯后底層解析的符號不同,C語言是_print,C++是_print_int_int

解決調(diào)用失敗問題

修改p.h文件

#ifndef _P_H
#define _P_H
extern "C"{
void print(int a,int b);
}
#endif

修改后再次執(zhí)行命令

gcc -c p.c
g++ -o main main.cpp p.o
./main

運行無報錯

思考:那C代碼能夠被C程序調(diào)用嗎

實驗:定義main,c函數(shù)如下

#include <stdio.h>
#include "p.h"
int main()
{
    printf("現(xiàn)在調(diào)用C語言函數(shù)\n");
    print(3,4);
    return 0;
}

重新執(zhí)行命令如下

gcc -c p.c
gcc -o mian main.c p.o

報錯:C語言里面沒有extern “C“這種寫法

C代碼既能被C++調(diào)用又能被C調(diào)用

為了使得p.c代碼既能被C++調(diào)用又能被C調(diào)用

將p.h修改如下

#ifndef _P_H
#define _P_H

#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */

void print(int a,int b);

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

#endif /* __P_H */

再次執(zhí)行命令

gcc -c p.c
gcc -o mian main.c p.o
./mian

結(jié)果示意:

到此這篇關(guān)于C++調(diào)用C接口的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++調(diào)用C接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    C++數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建的相關(guān)資料,希望通過本文幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言平衡二叉樹詳解

    C語言平衡二叉樹詳解

    這篇文章主要介紹了C語言平衡二叉樹的相關(guān)資料,需要的朋友可以參考下,小編覺得這篇文章寫的還不錯,希望能夠給你帶來幫助
    2021-11-11
  • 手把手帶你了解C++最小棧

    手把手帶你了解C++最小棧

    這篇文章主要介紹了C++的最小棧,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 平衡二叉樹AVL操作模板

    平衡二叉樹AVL操作模板

    這篇文章主要介紹了平衡二叉樹AVL操作模板,需要的朋友可以參考下
    2014-02-02
  • C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)

    C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Linux C/C++實現(xiàn)DNS客戶端請求域名IP的示例代碼

    Linux C/C++實現(xiàn)DNS客戶端請求域名IP的示例代碼

    DNS全稱:Domain Name System,域名解析系統(tǒng),是互聯(lián)網(wǎng)的一項服務(wù),本文主要介紹了C/C++如何實現(xiàn)DNS客戶端請求域名IP,感興趣的可以了解下
    2024-03-03
  • OpenCV圖像旋轉(zhuǎn)Rotate的詳細介紹

    OpenCV圖像旋轉(zhuǎn)Rotate的詳細介紹

    這篇文章主要介紹了OpenCV圖像旋轉(zhuǎn)Rotate,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • windows上安裝CLion教程及簡單使用詳解

    windows上安裝CLion教程及簡單使用詳解

    這篇文章主要介紹了windows上安裝CLion教程及簡單使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 篩選法的C++實現(xiàn)

    篩選法的C++實現(xiàn)

    篩選法又稱篩法,是求不超過自然數(shù)N(N>1)的所有質(zhì)數(shù)的一種方法。據(jù)說是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發(fā)明的,又稱埃拉托斯特尼篩子
    2013-10-10
  • C++的optional用法實例詳解

    C++的optional用法實例詳解

    編程中我們可能會遇到要處理可能為空的變量,比如說容器,基本類型,或者說對象實例,下面通過實例代碼介紹C++的optional用法,感興趣的朋友一起看看吧
    2024-02-02

最新評論

依安县| 西城区| 正定县| 凉城县| 南投县| 讷河市| 焦作市| 谷城县| 义马市| 康定县| 车致| 时尚| 云龙县| 漳浦县| 平邑县| 黔西县| 玉山县| 新竹市| 乐亭县| 巨鹿县| 出国| 钦州市| 汉沽区| 蚌埠市| 通山县| 通江县| 珠海市| 开阳县| 天长市| 新泰市| 会同县| 若尔盖县| 年辖:市辖区| 榆社县| 威远县| 新宁县| 昭苏县| 嵩明县| 九龙县| 宜兰市| 铁力市|