欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一個(gè)C語(yǔ)言文件p.c

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

一個(gè)頭文件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語(yǔ)言函數(shù)\n";
    print(3,4);
    return 0;
}

執(zhí)行命令

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

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

原因分析

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

總結(jié)

編譯后底層解析的符號(hào)不同,C語(yǔ)言是_print,C++是_print_int_int

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

修改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

運(yùn)行無(wú)報(bào)錯(cuò)

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

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

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

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

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

報(bào)錯(cuò):C語(yǔ)言里面沒(méi)有extern “C“這種寫(xiě)法

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接口的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++調(diào)用C接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++中vector的理解以及模擬實(shí)現(xiàn)

    詳解C++中vector的理解以及模擬實(shí)現(xiàn)

    vector是表示可變大小數(shù)組的序列容器。這篇文章主要為大家詳細(xì)介紹了vector的理解以及模擬實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-03-03
  • C++實(shí)現(xiàn)LeetCode(164.求最大間距)

    C++實(shí)現(xiàn)LeetCode(164.求最大間距)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(164.求最大間距),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++面試八股文之STL標(biāo)準(zhǔn)模板庫(kù)使用詳解

    C++面試八股文之STL標(biāo)準(zhǔn)模板庫(kù)使用詳解

    這篇文章主要為大家介紹了C++面試八股文之STL標(biāo)準(zhǔn)模板庫(kù)使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Qt實(shí)現(xiàn)網(wǎng)易云音樂(lè)進(jìn)度條效果

    Qt實(shí)現(xiàn)網(wǎng)易云音樂(lè)進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)網(wǎng)易云音樂(lè)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++實(shí)現(xiàn)簡(jiǎn)單FTP客戶(hù)端軟件開(kāi)發(fā)

    C++實(shí)現(xiàn)簡(jiǎn)單FTP客戶(hù)端軟件開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單FTP客戶(hù)端軟件開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中atof?函數(shù)的介紹

    C++中atof?函數(shù)的介紹

    這篇文章主要給大家分享的是C++中atof?函數(shù)的介紹,在?stdlib.h?中?atof?函數(shù),可用于將?char?字符串轉(zhuǎn)為?float?/?double?浮點(diǎn)數(shù)類(lèi)型,想具體了解語(yǔ)法的小伙伴可以參考下面文章的內(nèi)容,希望對(duì)大家有所幫助
    2021-11-11
  • 淺析C++調(diào)用Java的Jar包(帶參數(shù))問(wèn)題

    淺析C++調(diào)用Java的Jar包(帶參數(shù))問(wèn)題

    這篇文章主要介紹了C++調(diào)用Java的Jar包(帶參數(shù))問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C語(yǔ)言的運(yùn)算符你了解嗎

    C語(yǔ)言的運(yùn)算符你了解嗎

    這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-08-08
  • C++中const的實(shí)現(xiàn)機(jī)制深入分析

    C++中const的實(shí)現(xiàn)機(jī)制深入分析

    C語(yǔ)言以及C++語(yǔ)言中的const究竟表示什么?其具體的實(shí)現(xiàn)機(jī)制又是如何實(shí)現(xiàn)的呢?本文將對(duì)這兩個(gè)問(wèn)題進(jìn)行一些分析,需要了解的朋友可以參考下
    2012-12-12
  • Qt中JSON使用的詳細(xì)步驟

    Qt中JSON使用的詳細(xì)步驟

    本文主要介紹了Qt中JSON使用的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評(píng)論