亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C和C++混合編程問題

2020-05-23 14:13:47
字體:
供稿:網(wǎng)友

這篇文章主要介紹了C和C++混合編程問題,需要的朋友可以參考下

分析以下一段代碼:

 

 
  1. /*=======sum.h=========*/ 
  2.  
  3. #ifndef SUM_H 
  4. #define SUM_H 
  5. #include <stdio.h> 
  6.  
  7. int sum(int a,int b); 
  8.  
  9.  
  10. #endif; 
  11.  
  12. /*=======sum.c=========*/ 
  13.  
  14. #include "sum.h" 
  15.  
  16.  
  17. int sum(int a,int b) 
  18. int c=a+b; 
  19. return c; 
  20.  
  21. /*====main.cpp======*/ 
  22.  
  23. #include "sum.h" 
  24.  
  25. void mian(){ 
  26.  
  27. cout << sum(1,2)<<endl; 
  28.  

調(diào)用以上三個(gè)文件,編譯通過,但是執(zhí)行是出現(xiàn)以下問題:

obj : error LNK2001: 無法解析的外部符號(hào) "int __cdecl sum(int,int)" (?sum@@YAHHH@Z)

E:/Programming/Grapic/test/Debug/test.exe : fatal error LNK1120: 1 個(gè)無法解析的外部命令

問題出在哪里呢? 在main.cpp里調(diào)用了sum.c,也就是說在C++程序里調(diào)用了C程序,此時(shí)如果沒有作相應(yīng)處理將會(huì)出現(xiàn)鏈接錯(cuò)誤。

extern "C"表示編譯生成的內(nèi)部符號(hào)名使用C約定。C++支持函數(shù)重載,而C不支持,兩者的編譯規(guī)則也不一樣。函數(shù)被C++編譯后在符號(hào)庫中的名字與C語言的不同。例如,假設(shè)某個(gè)函數(shù)的原型為:void foo( int x, int y ); 該函數(shù)被C編譯器編譯后在符號(hào)庫中的名字可能為_foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都采用了相同的機(jī)制,生成的新名字稱為“mangled name”)。_foo_int_int這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C++就是靠這種機(jī)制來實(shí)現(xiàn)函數(shù)重載的。

那么如果在C中調(diào)用C++代碼,以及如何在C++中調(diào)用C的代碼呢?

extern "C"表示編譯生成的內(nèi)部符號(hào)名使用C約定。

1. 如何在C++中調(diào)用C呢?

C++調(diào)用C,extern "C" 的作用是:讓C++連接器找調(diào)用函數(shù)的符號(hào)時(shí)采用C的方式

本文開頭提出的筆試題可以這樣修改:

 

 
  1. /*=======sum.h=========*/ 
  2.  
  3. #ifndef SUM_H 
  4. #define SUM_H 
  5. #include <stdio.h> 
  6.  
  7. int sum(int a,int b); 
  8.  
  9.  
  10. #endif; 
  11.  
  12. /*=======sum.c=========*/ 
  13.  
  14. #include "sum.h" 
  15.  
  16.  
  17. int sum(int a,int b) 
  18. int c=a+b; 
  19. return c; 
  20.  
  21. /*====main.cpp======*/ 
  22.  
  23. extern "C" 
  24. #include "sum.h" 
  25.  
  26. void mian(){ 
  27.  
  28. cout << sum(1,2)<<endl; 
  29.  

執(zhí)行成功

相信到這里差不多明白了

2. 怎樣在C里調(diào)用C++呢?

在C中引用C++函數(shù)(C調(diào)用C++,使用extern "C"則是告訴編譯器把cpp文件中extern "C"定義的函數(shù)依照C的方式來編譯封裝接口,當(dāng)然接口函數(shù)里面的C++語法還是按C++方式編譯)

執(zhí)行:test1.obj : error LNK2019: 無法解析的外部符號(hào) _sum,該符號(hào)在函數(shù) _main 中被引用

E:/Programming/Grapic/test/Debug/test.exe : fatal error LNK1120: 1 個(gè)無法解析的外部命令

 

 
  1. /*=======sum.h=========*/ 
  2.  
  3. #ifndef SUM_H 
  4. #define SUM_H 
  5. #include <stdio.h> 
  6.  
  7. int sum(int a,int b); 
  8.  
  9.  
  10. #endif; 
  11.  
  12. /*=======sum.cpp=========*/ 
  13.  
  14. #include "sum.h" 
  15.  
  16.  
  17. extern "C" 
  18. int sum(int a,int b) 
  19. int c=a+b; 
  20. return c; 
  21.  
  22. /*====main.c======*/ 
  23.  
  24. #include "sum.h" 
  25.  
  26. void mian(){ 
  27.  
  28. cout << sum(1,2)<<endl; 
  29.  

3. 標(biāo)準(zhǔn)規(guī)范寫法

一般我們都將函數(shù)聲明放在頭文件,當(dāng)我們的函數(shù)有可能被C或C++使用時(shí),我們無法確定被誰調(diào)用,使得不能確定是否要將函數(shù)聲明在extern "C"里,所以,我們可以添加

 

 
  1. #ifdef __cplusplus 
  2.  
  3. extern "C" 
  4.  
  5.  
  6. #endif 
  7.  
  8. //函數(shù)聲明 
  9.  
  10. #ifdef __cplusplus 
  11.  
  12.  
  13. #endif 

利用以上聲明形式就可以綜合運(yùn)用了。

在C中引用C++語言中的函數(shù)和變量時(shí),C++的函數(shù)或變量要聲明在extern "C"{}里,但是在C語言中不能使用extern "C",否則編譯出錯(cuò)。(出現(xiàn)錯(cuò)誤: error C2059: syntax error : 'string',這個(gè)錯(cuò)誤在網(wǎng)上找了很久,國內(nèi)網(wǎng)站沒有搜到直接說明原因的,原因是extern "C"是C++中的關(guān)鍵詞,不是C的,所有會(huì)出錯(cuò)。

 

 
  1. /*=======sum.h=========*/ 
  2.  
  3. #ifndef SUM_H 
  4. #define SUM_H 
  5. #include <stdio.h> 
  6.  
  7. int sum(int a,int b); 
  8.  
  9.  
  10. #endif; 
  11.  
  12. /*=======sum.cpp=========*/ 
  13.  
  14. #include "sum.h" 
  15.  
  16.  
  17. int sum(int a,int b) 
  18. int c=a+b; 
  19. return c; 
  20.  
  21. /*====main.c======*/ 
  22.  
  23. #include "sum.h" 
  24.  
  25. void mian(){ 
  26.  
  27. cout << sum(1,2)<<endl; 
  28.  

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
av电影免费看| 一区二区在线观看av| 视频一区国产精品| 久久不射影院| 亚洲欧美一区二区三区国产精品| 欧美 日韩 国产 在线观看| 91精品国产色综合久久不卡电影| 成人精品免费视频| 少妇高潮流白浆| www天堂在线| 欧美性69xxxx肥| 91超碰中文字幕久久精品| 亚洲国语精品自产拍在线观看| 国产欧美一区二区三区小说| 极品少妇一区二区三区精品视频| 国产午夜麻豆影院在线观看| 国产一区二区三区不卡在线观看| 欧美一区二区三区红桃小说| 日本少妇激情视频| xxxxxxxxx欧美| av片在线观看网站| 国产高清精品久久久久| 在线观看免费看片| 亚洲最大成人网站| 91香蕉视频在线观看视频| 国产免费av观看| 日韩极品少妇| 精品毛片三在线观看| 色偷偷一区二区三区| 国产亚洲一二三区| 亚洲天堂免费在线观看视频| 美女被内谢流白浆高视频| 日韩欧美在线视频观看| 中文乱码人妻一区二区三区视频| 亚洲啪av永久无码精品放毛片| 香港成人在线视频| 99视频免费在线观看| 日韩成人在线资源| 91导航在线观看| 中文字幕在线观看不卡视频| 国产精品青草久久| 成人一区不卡| 一区二区毛片| 久久综合成人| xxx欧美尤物xxx| 久久久久久久欧美精品| 免费在线一区二区三区| 一本到高清视频免费精品| av动漫在线免费观看| 哺乳一区二区三区中文视频| 成人性a激情免费视频| 日韩欧美一区二区在线观看| 91久久国产精品91久久性色| 中文字幕亚洲精品一区| 日韩有码一区| 国产精品成人观看视频国产奇米| 日韩av片永久免费网站| 亚洲精品国产成人久久av盗摄| 亚洲精品日韩一| 天堂av资源网| 国产一级特黄a大片免费| 国产精品视频看看| 18free性欧美另类hd| 欧美黑人3p| www.wu福利视频18| 国产精品久久国产| 成人在线观看免费网站| caoporm在线视频| 国产无遮挡在线视频免费观看| 蜜桃久久影院| 亚洲自拍第三页| 亚洲一级av毛片| 麻豆成人入口| av在线不卡免费看| 91麻豆国产自产在线观看亚洲| 136国产福利精品导航| 国产精品国产精品国产专区蜜臀ah| 国产污在线观看| 欧美成人se01短视频在线看| 美女日韩在线中文字幕| bdsm精品捆绑chinese| 欧美一区二区三区高清视频| 91色p视频在线| 成人亚洲一区二区| 免费的黄网站在线观看| yellow网站在线观看| chinese麻豆新拍video| 一本色道久久综合熟妇| 中文字幕一区二区av| 日韩黄色一级大片| 久久天天躁狠狠躁夜夜爽蜜月| 日本电影欧美片| 国产精品亚洲二区在线观看| 91精东传媒理伦片在线观看| 特级黄国产片一级视频播放| 成人性生生活性生交12| 婷婷久久综合九色综合绿巨人| 国产精品一区免费在线| 91精品国产99久久久久久红楼| 久久精品国产精品亚洲精品| 免费国产麻豆传| 成人高潮成人免费观看| 国模精品一区二区三区色天香| 91精品国产91久久久久麻豆 主演| 在线高清欧美| 日日夜夜综合网| 日韩高清不卡在线| 日韩女优av电影在线观看| 亚洲欧美强伦一区二区| 鲁大师成人一区二区三区| 天堂v在线观看| 欧美精品一区二区久久久| 久久国产乱子伦免费精品| 欧美在线一二三| 伊人网综合在线| 日本亚洲欧美美色| 精品国产亚洲一区二区三区| 成全在线观看免费完整动漫| yjizz视频网站在线播放| 精品一区二区三区久久久| 97人妻天天摸天天爽天天| 色欲av永久无码精品无码蜜桃| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩在线视频免费观看| 国产麻豆视频网站| 精品女同一区二区三区在线播放| 男女猛烈激情xx00免费视频| 天天影视综合色| 九色丨蝌蚪丨成人| 亚在线播放中文视频| 中日韩精品一区二区三区| 午夜精品久久久久久久99老熟妇| av在线播放一区二区三区| 99视频在线观看地址| 国产一区在线观看免费| 天堂一区在线观看| 国产亚洲精品综合一区91| 欧美a一欧美| 国产精品国产亚洲精品看不卡15| 久久er99热精品一区二区三区| 国产精品免费看一区二区三区| 绯色av蜜臀vs少妇| h视频网站在线观看| 精品国产区一区二区三区在线观看| 99精品一区二区三区的区别| av在线观看地址| 日日悠悠久久| 在线看国产精品| 欧美成人首页| 国产美女作爱全过程免费视频| 欧美视频亚洲色图| 亚洲片国产一区一级在线观看| 欧美色婷婷天堂网站| 色哟哟在线观看一区二区三区| 欧美性受xxxxxx黑人xyx性爽| 国产精品vip| 美女做a视频| 久久99国产精品久久久久久久久| 亚洲精品电影久久久| 日韩欧美高清一区二区三区| av网站免费在线观看| 国产精品xxxx喷水欧美| 六九午夜精品视频| 免费在线观看一区二区三区| 在线视频欧美日韩| 韩国欧美国产一区| 成品人视频ww入口| 2023av在线| 91美女片黄在线观看游戏| 4388成人网| 成人性生交大片免费看午夜| 9i精品一二三区| 成人精品视频99在线观看免费| 国产成人精品av久久| 亚洲精品成人av久久| 91麻豆国产福利精品| 免费视频久久久| 久草在线视频资源| 精品国产百合女同互慰| 亚洲AV无码久久精品国产一区| 一本大道av一区二区在线播放| 欧美1级片网站| 一女三黑人理论片在线| 国产精品电影一区| 99热精品在线观看| 九九九久久久久| 十八禁一区二区三区| 日韩av在线播放网址| 美女任你摸久久| 99v久久综合狠狠综合久久| 一区二区在线免费| 欧美性受极品xxxx喷水| 午夜精品久久久久久久99热影院| 香蕉av一区| 爱情岛亚洲播放路线| 国产99久久久国产精品免费看| 亚洲一| 最新的欧美黄色| 亚洲 欧美 变态 另类 综合| 在线观看免费一区二区| 欧美成人三级在线播放| 久久久久久一级片| 欧美高清videos高潮hd| 国产国产一区| 一广人看www在线观看免费视频| av在线播放资源| 成人xvideos免费视频| 福利一区二区在线观看| 国产91对白刺激露脸在线观看| 国产精品日韩精品在线播放| 一区一区视频| 亚洲综合电影| 欧美一级本道电影免费专区| 91视频综合网| 先锋影音男人站你懂得| 国产精品免费一区二区三区四区| 亚洲图片自拍偷拍| 国产精品夜夜嗨| 国产成人久久精品一区二区三区| 精品久久香蕉国产线看观看gif| 日韩中文视频免费在线观看| 久久动漫亚洲| 亚洲天堂精品一区| 亚洲娇小xxxx欧美娇小| 亚洲五月综合| 91美女精品| 超碰精品一区二区三区乱码| av免费在线观看网址| 91网站观看| 久草视频手机在线观看| 国产不卡精品视男人的天堂| 欧美成人精品| aaa级精品久久久国产片| 国产精品视频在线看| 瑟瑟视频在线免费观看| 国产精品午夜一区二区三区| 欧美色精品在线视频| 亚洲第一网站在线观看| 亚洲丝袜一区| 亚洲理论电影在线观看| 成人综合国产精品| 一级毛片美女欧洲| 中文字幕在线视频久| 五月婷婷综合色| 麻豆国产va免费精品高清在线| 在线视频一区二区三区四区| 亚洲香蕉伊综合在人在线视看| 国外成人在线直播| av中文字幕一区| 91精品国产乱码久久蜜臀| 亚洲精品不卡在线观看| 成人av观看| 国产iv一区二区三区| 欧美一二区在线观看| 欧美爱爱免费视频| 天堂精品视频| 911国产网站尤物在线观看| h网站在线免费观看| 欧美精品成人网| 色呦呦网站在线观看| 狠狠干婷婷色| 国产青草视频在线观看视频| 国产特级aaaaaa大片| 91在线精品一区二区| 久久久久麻豆v国产精华液好用吗| 久草在线视频福利| 一本一本久久a久久| 久久国产婷婷国产香蕉| 精品一区二区三区四区| 好男人官网在线| 成人综合国产精品| 黄色电影免费在线观看| 最近中文字幕mv免费高清电影| 九色视频网站在线观看| 蜜桃传媒麻豆第一区在线观看| 天堂av一区二区三区| 日韩电影中文 亚洲精品乱码| 欧美一区二区福利在线| 亚洲国产精品久久久久婷婷884| 成人av在线资源网站| 亚洲成熟丰满熟妇高潮xxxxx| 亚洲天堂狠狠干| 午夜免费激情视频| 91av在线视频观看| 欧美午夜视频在线观看| 欧美成人免费va影院高清| 亚洲日韩成人| 91在线播放网站| 国产一区二区女| 国产精品va在线| 色黄视频免费看| 欧美成人精品影院| 日本女人黄色片| 久久精品国产91精品亚洲| 久久久久福利视频| 欧美激情手机在线视频| 国内精品久久久久久久久| 欧美粗暴性video| 国产伦精品一区二区三区视频黑人| 精品国产午夜福利| 国产一级久久| 成人c视频免费高清在线观看| 国产裸体歌舞团一区二区| 欧美一级视频| 狠狠色伊人亚洲综合网站色| 国产精品 日产精品 欧美精品| 国产精品亚洲一区二区无码| 美女免费黄视频网站| 91九色porny视频| 91麻豆国产在线观看| 影音先锋国产精品| 最新国产在线拍揄自揄视频| 性网站在线看| 免费视频成人| 国产伦精品一区二区三区精品| 特大巨黑人吊性xxxxn38| 国产免费高清视频| 日本一区二区欧美| 国产精品va无码一区二区三区| 日韩欧美成人免费视频| 久久久久99精品成人片三人毛片| 91免费福利视频| 亚洲精品一区二区三区区别| 亚洲欧美日韩中文字幕在线观看| 精品人妻一区二区乱码| 一级毛片在线| 你懂的免费在线观看视频网站| 在线免费观看成人短视频|