精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++中是如何調用C接口的?

開發 后端 開發工具
如何在C++代碼中調用寫好的C接口?你可能會奇怪,C++不是兼容C嗎?直接調用不就可以了?這里我們先按下不表,先看看C++如何調用C代碼接口。

如何在C++代碼中調用寫好的C接口?你可能會奇怪,C++不是兼容C嗎?直接調用不就可以了?這里我們先按下不表,先看看C++如何調用C代碼接口。

[[275163]]

C++如何調用C接口

為什么會有這樣的情況呢?想象一下,有些接口是用C實現的,并提供了庫,那么C++中該如何使用呢?我們先不做任何區別對待,看看普通情況下會發生什么意想不到的事情。

首先提供一個C接口:

  1. #include"test.h" 
  2. void testCfun() 
  3.     printf("I am c fun\n"); 
  4.     return; 

為了簡化,我們在這里就不將它做成靜態庫或者動態庫了,我們在這里編譯成C目標文件:

  1. gcc -c test.c 

另外提供一個頭文件test.h:

  1. #include<stdio.h> 
  2. void testCfun(); 

我們的C++代碼調用如下:

  1. #include"test.h" 
  2. #include<iostream> 
  3. using namespace std; 
  4. int main(void) 
  5.     /*調用C接口*/ 
  6.     cout<<"start to call c function"<<endl
  7.     testCfun(); 
  8.     cout<<"end to call c function"<<endl
  9.     return 0; 

編譯:

  1. $ g++ -o main main.cpp test.o 
  2. /tmp/ccmwVJqM.o: In function `main': 
  3. main.cpp:(.text+0x21): undefined reference to `testCfun()' 
  4. collect2: error: ld returned 1 exit status 

很不幸,最后的鏈接報錯了,說找不到testCfun,但是我們確實定義了這個函數。為什么會找不到呢?現在你還會認為C++直接就可以調用C接口了嗎?

真相

我們都知道,C++中函數支持重載,而C并不支持。C++為了支持函數重載,它在“生成”函數符號信息時,不能僅僅通過函數名,因為重載函數的函數名都是一樣的,所以它還要根據入參,命名空間等信息來確定唯一的函數簽名。或者說C++生成函數簽名的方式與C不一致,所以即便是函數名一樣,對于C和C++來說,它們最終的函數簽名還是不一樣。當然這里又是另外一回事了,我們不細說。我們看看兩個文件里的函數符號有什么區別:

  1. $ nm test.o|grep testCfun 
  2. 0000000000000000 T testCfun 
  3. $ nm main.o|grep testCfun 
  4.                 U _Z8testCfunv 

所以它們兩個能鏈接在一起才真是奇怪了呢!名字都不同,還怎么鏈接?

如何處理

那么如何處理呢?很顯然,我們必須告訴鏈接器,這是一個C接口,而不是C++接口,所以需要加入 extern C,我們修改test.h

  1. #include<stdio.h> 
  2. extern "C"{ 
  3. void testCfun(); 

這里用extern "C"將testCfun接口包裹起來,告訴編譯器,這里的是C代碼哈,你要按C代碼的方式處理。再次編譯:

  1. $ g++ -o main main.cpp test.o 
  2. $ ./main 
  3. start to call c function 
  4. I am c fun 
  5. end to call c function 

看終端輸出,完美!

優化

雖然上面的C接口可以被C++正常調用了,但是如果這個C接口要被代碼調用呢?增加main.c內容如下

  1. //main.c 
  2. #include"test.h" 
  3. int main(void) 
  4.     /*調用C接口*/ 
  5.     testCfun(); 
  6.     return 0; 

編譯:

  1. $ gcc -o main main.c test.c 
  2. In file included from main.c:2:0: 
  3. test.h:2:8: error: expected identifier or '(' before string constant 
  4.  extern "C"{ 
  5.         ^ 
  6. In file included from test.c:2:0: 
  7. test.h:2:8: error: expected identifier or '(' before string constant 
  8.  extern "C"{ 

不出意外,又報錯了,很顯然,C語言中并沒有extern "C"這樣的寫法,所以為了能使得test.c的代碼既能被C++調用,也能被C調用,需要改寫成下面這樣:

  1. #include<stdio.h> 
  2. #ifdef __cplusplus 
  3. extern "C"{ 
  4. #endif 
  5.  
  6. void testCfun(); 
  7.  
  8. #ifdef __cplusplus 
  9. #endif 

這里通過__cplusplus宏來控制是否需要extern “C”,如果是C++編譯器,那么extern "C"部分就會被預處理進去,這樣test.c代碼就可以既用于C++,也可以用于C啦。

趕快去你的C項目代碼頭文件中看看,是不是也有這樣的代碼段呢?

問題

為什么我們在C++代碼中可以直接調用一些標準C庫函數呢?即使你在main函數中調用printf等函數,它也不會出現鏈接錯誤。因為庫函數已經有了類似的處理了。

如果你還是不確定,你可以先預處理:

  1. $ g++ -E main.i main.cpp 

去生成的main.i文件中找一找,是不是有extern "C"。

總結

C++支持重載,而C不支持,C++并不能直接調用C代碼寫好的接口,因此如果你的C代碼想要能夠被C調用,也想被C++調用,那么別忘了extern "C"。

責任編輯:趙寧寧 來源: 編程珠璣
相關推薦

2020-07-31 18:33:56

C++編程語言

2021-10-11 11:53:07

C++接口代碼

2010-01-28 13:35:41

調用C++函數

2010-01-20 09:54:27

C++數據類型

2025-05-20 10:00:00

C++命名空間別名代碼

2010-01-21 14:07:14

CC++聲明

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2010-01-26 15:51:06

C++變量

2014-09-19 10:46:36

LuaCC++

2010-02-01 13:25:32

Python腳本

2023-11-09 23:31:02

C++函數調用

2011-05-18 17:15:45

2010-01-28 14:33:58

C++Test工具

2010-01-28 16:31:54

C++類型

2010-01-25 10:25:19

C++變量

2010-01-27 17:16:52

C++構造函數

2010-01-21 13:33:44

C++基類

2020-08-21 13:20:36

C++If ElseLinux

2010-01-20 10:19:55

C++數組
點贊
收藏

51CTO技術棧公眾號

久久精品成人欧美大片古装| 色妞www精品视频| 国产精品美女久久久久av福利| 欧美日韩国产精品综合| 国产精品极品国产中出| 亚洲福利电影网| 日韩精品久久一区| 中文在线免费观看| 亚洲精品二区三区| 亚洲激情自拍图| 男操女免费网站| 影音先锋在线视频| 91麻豆精品视频| 国产日产亚洲精品| 成年人免费看毛片| 久久国产成人精品| 亚洲福利在线视频| 亚洲免费av一区| 精灵使的剑舞无删减版在线观看| 久久精品视频在线免费观看| 91成人在线看| 中文字幕 自拍偷拍| 欧美人与禽猛交乱配视频| 亚洲欧洲日产国产网站| 极品人妻一区二区| 成人做爰免费视频免费看| 夜夜嗨av一区二区三区中文字幕 | 一区二区三区视频播放| 一本色道久久加勒比精品| av中文字幕av| www日韩tube| 成人深夜福利app| 国产精品永久免费观看| 国产毛片aaa| 欧美极品一区二区三区| 中文国产成人精品久久一| 天堂www中文在线资源| 亚洲成人1区| 欧美自拍偷拍一区| 国产免费黄色av| 日韩精品卡一| 亚洲精品国产精品乱码不99| 亚洲国产日韩综合一区| 男操女在线观看| 91视频免费播放| 国产乱码精品一区二区三区中文| 国产女人高潮的av毛片| 免费在线观看成人| 国产成人在线亚洲欧美| 国产无遮挡又黄又爽| 天天操综合网| www.亚洲男人天堂| 青青草自拍偷拍| 欧美亚洲激情| 一本色道久久综合狠狠躁篇怎么玩 | 天堂va蜜桃一区二区三区漫画版| 午夜精品国产精品大乳美女| 久草视频在线资源站| 牛牛国产精品| 九九热在线精品视频| 久久高清内射无套| 亚洲国产一区二区在线观看| 美女撒尿一区二区三区| 伊人在线视频观看| 在线电影一区二区| 欧美成人免费全部观看天天性色| 26uuu成人网| 欧美特黄a级高清免费大片a级| 欧美另类高清videos| 538精品在线观看| 欧美三级视频| 国模极品一区二区三区| 日韩少妇高潮抽搐| 欧美亚洲一区二区三区| 国产精品aaaa| 97人妻精品一区二区三区动漫| 久草在线在线精品观看| 91亚洲人电影| 欧美一级在线免费观看| 99精品久久只有精品| 欧美一区二区视频17c| 成人av毛片| 亚洲日本乱码在线观看| 日韩一区二区高清视频| 密臀av在线播放| 色视频欧美一区二区三区| 美女在线视频一区二区| 欧美久久一区二区三区| 欧美精品一区二区高清在线观看| 风间由美一二三区av片| 精品精品99| 欧美伦理91i| 天天综合网久久综合网| 日本不卡视频在线| 99高清视频有精品视频| 亚欧洲精品视频| 欧美国产国产综合| 97久久国产亚洲精品超碰热| 澳门成人av网| 欧美一级理论片| 精品久久久久久中文字幕人妻最新| 欧美日韩播放| 九九久久久久99精品| 久久久免费高清视频| 精品一区二区免费看| 国产一区二区精品在线| 婷婷在线视频观看| 五月天视频一区| 日韩av.com| 亚洲成人一品| 欧美另类xxx| 中文在线资源天堂| aaa欧美日韩| 一道本在线观看视频| 黄色软件视频在线观看| 91精品一区二区三区在线观看| 人妻丰满熟妇av无码久久洗澡| 久久中文字幕av一区二区不卡| 国内外成人免费激情在线视频| 这里只有精品6| 99re这里都是精品| 久久免费一级片| 成人激情视屏| 日韩精品在线视频| 国产亚洲第一页| 精品一区二区日韩| 亚洲韩国在线| 日韩三级影视| 日韩经典中文字幕在线观看| 欧美三级日本三级| 麻豆国产欧美日韩综合精品二区| 久久精品一区二区三区不卡免费视频 | 欧亚一区二区| 日韩av在线一区| 九九热国产在线| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩精品免费观看| 日本无删减在线| 91麻豆精品国产91| 国产精品一区二区亚洲| 日韩精品亚洲一区二区三区免费| 狠狠色综合欧美激情| 在线观看三级视频| 欧美一区欧美二区| 免费高清在线观看电视| 精品中文字幕一区二区| 亚洲高清乱码| 91tv亚洲精品香蕉国产一区| 亚洲美女www午夜| 日韩视频在线观看一区| 97久久精品人人做人人爽| www精品久久| 国产精品天天看天天狠| 久久久久久久久中文字幕| 国产成人免费看一级大黄| 中文字幕一区二区三中文字幕| 久久婷五月综合| 欧美gay男男猛男无套| 国产精品亚洲欧美导航| av电影在线观看| 欧美日韩精品一区二区在线播放| 99久久99久久精品免费看小说.| 人人爽香蕉精品| 亚洲视频电影| 粉嫩一区二区三区在线观看| 欧美xxxx18国产| 成人av无码一区二区三区| 野花社区视频在线观看| 韩国无码av片在线观看网站| 国产精品怡红院| 国产精品久久二区二区| 五月婷婷丁香色| 亚洲国产精品综合久久久| 91久久爱成人| 美女搞黄视频在线观看| 亚洲欧洲日韩国产| 一区二区的视频| 亚洲女与黑人做爰| 人妻激情偷乱频一区二区三区| 亚洲黄色一区| 日本午夜一区二区三区| 免费成人毛片| 欧美高清视频一区二区| 污污网站免费在线观看| 欧美性一二三区| www欧美com| 99精品久久免费看蜜臀剧情介绍| 日本999视频| 永久亚洲成a人片777777| 国产精品一区二区av| 伊人久久在线| 久久久极品av| 天天综合天天色| 精品视频1区2区| 九九免费精品视频| 日本一区二区三区高清不卡| 亚洲av无日韩毛片久久| 99av国产精品欲麻豆| 亚洲高清精品中出| 国产区精品视频在线观看豆花| 国产成人精品优优av| 97超碰在线公开在线看免费| 日韩成人xxxx| 99国产揄拍国产精品| 丁香五六月婷婷久久激情| 特级西西人体高清大胆| 成人高清av在线| 三级av免费观看| 亚洲精品日韩久久| 夜夜爽99久久国产综合精品女不卡 | av动漫在线观看| 在线免费观看日本欧美爱情大片| 鲁丝片一区二区三区| 精品一区二区三区亚洲| 国产成人精品久久久| 国产啊啊啊视频在线观看| 中文字幕国产精品| 无码国产精品高潮久久99| 欧美日韩视频专区在线播放| 亚洲欧美在线观看视频| 亚洲毛片av在线| 卡一卡二卡三在线观看| 99精品欧美一区二区蜜桃免费| 中文字幕avav| 久久97超碰国产精品超碰| 国产视频一区二区三区在线播放 | 国产精品久久久久7777按摩| 国产精品第七页| 丰满岳乱妇一区二区三区| 2025韩国理伦片在线观看| 午夜在线播放视频欧美| 成人性生活视频免费看| 欧美日韩国产高清| 美女黄色片网站| 日韩精品电影| 日韩aⅴ视频一区二区三区| 加勒比色综合久久久久久久久| 亚洲一区二区三| 国产不卡精品在线| 国产综合在线观看视频| av成人在线看| 国产精品91久久久久久| 丁香六月综合| 欧美最猛黑人xxxx黑人猛叫黄| 99爱在线视频| 免费av一区二区| 在线xxxx| 欧美激情videoshd| 免费在线中文字幕| 欧美精品久久久久久久免费观看| 美足av综合网| 久久久久久久国产| 国产高潮在线| 欧美一级电影久久| 欧洲一区二区三区精品| 奇米4444一区二区三区| 欧美成人资源| 国产精品久久久久久久久久三级| 韩国三级一区| 国产精品爽爽爽| 91精品视频一区二区| 亚洲精品免费av| 超碰97久久国产精品牛牛| 国产精品久久亚洲7777| 日韩黄色网络| 日韩欧美精品在线不卡 | 精品国产三级a∨在线| 在线成人直播| 91丨porny丨探花| 亚洲欧美激情诱惑| www.超碰com| 国内精品在线播放| 美国黄色一级视频| 99国产精品久| 九九九视频在线观看| 最新热久久免费视频| 欧美成人国产精品高潮| 欧美日韩国产中文精品字幕自在自线| 麻豆成人免费视频| 欧美日本在线看| 成人免费公开视频| 亚洲男人天堂2024| 免费黄色网址在线观看| 精品中文字幕在线观看| 涩涩视频网站在线观看| 国产精品久久久久久久久影视| 国产精品亚洲欧美一级在线| 精品乱码一区二区三区| 国产成人调教视频在线观看| 一本色道久久99精品综合| 激情久久婷婷| 亚洲免费av一区二区三区| 国产一区不卡在线| 特大黑人巨人吊xxxx| 国产精品理论在线观看| 国产第100页| 欧美三日本三级三级在线播放| 精品人妻午夜一区二区三区四区 | 欧美极品jizzhd欧美仙踪林| 国产夜色精品一区二区av| 男人操女人的视频网站| 欧美性xxxx极品高清hd直播| 国产三级在线观看视频| 亚洲免费一在线| 婷婷色在线播放| 国产精品久久久久久久久久久久 | 欧美日韩免费观看一区| 希岛爱理av一区二区三区| 奇米精品一区二区三区| 国产在线看一区| 亚洲av无码一区二区三区人| 亚洲精品免费播放| 中文字幕免费播放| 日韩国产欧美精品在线| 午夜影院免费在线| 国产精品久久久久77777| 国产精品网在线观看| 黄色一级片网址| 日韩电影一区二区三区四区| 中国黄色片视频| 亚洲人成人一区二区在线观看| 欧美亚洲另类小说| 亚洲精品一线二线三线| 香港伦理在线| 日韩av电影国产| 高清一区二区三区| 男同互操gay射视频在线看| 日本不卡视频一二三区| 人妻少妇无码精品视频区| 亚洲成人手机在线| 精品国产亚洲av麻豆| 综合激情国产一区| 亚洲综合av一区二区三区| 久久久福利视频| 亚洲伦伦在线| 中文字幕天堂网| 亚洲一区二区三区自拍| 国产欧美一区二区三区视频在线观看| 永久免费毛片在线播放不卡 | 亚洲国产精品综合久久久| 国产精品一区二区小说| 久久综合av免费| 国产精品一区无码| 亚洲精品日韩在线| 日本乱码一区二区三区不卡| 精品国产一区二区三区麻豆免费观看完整版 | 日韩精品久久一区| 石原莉奈在线亚洲二区| 亚洲一区二区三区蜜桃| 日韩欧美综合在线视频| 日漫免费在线观看网站| 97成人在线视频| 香蕉久久夜色精品国产更新时间| 青青青免费在线| 91在线视频免费91| 天天做天天爱夜夜爽| 亚洲精品视频二区| 国产成人精品123区免费视频| 欧美一进一出视频| 日本欧美久久久久免费播放网| 国产精品18在线| 欧美一级片在线| sm捆绑调教国产免费网站在线观看| 国产精品日本一区二区| 999在线观看精品免费不卡网站| 亚洲一区二区观看| 欧美主播一区二区三区美女| av免费在线一区二区三区| 成人精品在线视频| 欧美三级小说| 欧美在线一级片| 在线亚洲精品福利网址导航| www.久久热.com| 91免费精品视频| 亚洲一级特黄| 免费黄色在线视频| 欧美日韩美女一区二区| 欧美寡妇性猛交xxx免费| 久久99国产精品99久久| 日产欧产美韩系列久久99| 美国一级片在线观看| 精品国产91九色蝌蚪| 电影一区二区三| 91看片淫黄大片91| 91啪九色porn原创视频在线观看| 日韩国产亚洲欧美| 欧美精品免费播放| 日韩高清影视在线观看| 老司机午夜性大片| 亚洲成人资源网| 在线免费观看黄| 高清国语自产拍免费一区二区三区| 性欧美xxxx大乳国产app| 看黄色录像一级片| 亚洲国产古装精品网站| 日韩在线免费| 丁香花在线影院观看在线播放| 亚洲国产精品成人综合色在线婷婷 | 久热这里只精品99re8久| 蜜臀精品久久久久久蜜臀|