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

C/C++中extern "C" 的作用分析

 更新時間:2014年09月05日 11:11:59   投稿:shichen2014  
這篇文章主要介紹了C/C++中extern "C" 的作用,是在進行C/C++程序設計中非常常見的用法,需要的朋友可以參考下

我們經常會在C/C++程序中見到extern "C",這是一個很重要的概念。本文就來以實例形式講述C/C++中extern "C"的作用。分享給大家供大家參考之用。具體分析如下:

作用:實現C和C++混合編程。

原理:C和C++編譯器編譯之后,函數名會編譯成不同的名字,鏈接階段名字查找會找不到目標,后面實例中會詳解。

用法:
①.c文件中定義的函數,.cpp文件要調用時,該.cpp文件中要用extern "C"聲明該函數;
②.反過來,.cpp文件中定義的函數,.c文件要調用,則同樣要在.cpp文件中用extern "C"聲明,.c文件只用普通的extern聲明。

兩個源文件分別編譯成.o文件,再鏈接成執(zhí)行文件。鏈接.o文件生成執(zhí)行文件時,必須得用g++。

實例:

在源文件中聲明的,沒有頭文件

.c文件定義的函數,.cpp文件調用:

//.c文件定義的函數
extern int myadd(int a, int b);
int myadd(int a, int b)
{
  return a+b;
}

//.cpp文件調用
#include <iostream>
using namespace std;
extern "C" int myadd(int a, int b);
int main()
{
  cout << myadd(3, 7) << endl;
  return 0;
}

.cpp文件定義的函數,.c文件調用:

//.cpp文件定義的函數
extern "C" int myadd(int a, int b);
int myadd(int a, int b)
{
  return a + b;
}

//.c文件調用
#include <stdio.h>
extern int myadd(int a, int b);
int main()
{
  printf("%d\n", myadd(3, 7));
  return 0;
}

如果在頭文件中聲明,則.c文件正常的包含該頭文件,.cpp文件應該用

//.cpp文件的包含方式
extern "C"
{
  #include "myHead.h"
}

的方式來包含頭文件,該頭文件中聲明的函數都為C方式編譯。

原理補充:C文件中,上述函數編譯之后的函數名為類似于_myadd的形式,而CPP的編譯之后函數名為類似于_myadd_int_int的形式,因為CPP要支持重載,用這種方式來區(qū)別重載的函數。

相信本文所述對大家的C++程序設計有一定的借鑒價值。

相關文章

  • Qt實現導出QTableWidget/QTableView數據

    Qt實現導出QTableWidget/QTableView數據

    這篇文章主要介紹了在Qt中實現將QTableWidget或者QTableView中的數據直接導出的示例代碼,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-01-01
  • C++模板編程特性之移動語義

    C++模板編程特性之移動語義

    首先,移動語義和完美轉發(fā)這兩個概念是在C++的模板編程的基礎上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉發(fā)
    2022-08-08
  • Qt利用QChart實現實時波形圖的繪制

    Qt利用QChart實現實時波形圖的繪制

    這篇文章主要介紹了Qt如何利用QChart實現實時波形圖的繪制,文中的示例代碼講解詳細,對我們學習有一定是參考價值,需要的可以參考一下
    2022-06-06
  • c++線程池實現方法

    c++線程池實現方法

    這篇文章主要介紹了c++線程池實現方法,實例分析了C++線程池的原理與相關實現技巧,需要的朋友可以參考下
    2015-06-06
  • C++控制臺強化如何實現一定界面效果(簡潔版)

    C++控制臺強化如何實現一定界面效果(簡潔版)

    這篇文章主要介紹了C++控制臺強化如何實現一定界面效果(簡潔版),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 如何寫好C main函數的幾個注意事項

    如何寫好C main函數的幾個注意事項

    這篇文章主要介紹了如何寫好C main函數的幾個注意事項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 詳解C語言中sizeof如何在自定義函數中正常工作

    詳解C語言中sizeof如何在自定義函數中正常工作

    在main函數中,sizeof是可以正常工作的,但是在自定義函數中就不可以了。所以本文將為大家詳細講解一下如何解決這一問題,感興趣的可以了解一下
    2022-05-05
  • C++設計模式之原型模式

    C++設計模式之原型模式

    這篇文章主要介紹了C++設計模式之原型模式,本文講解了什么是原型模式、為什么要使用原型模式、代碼實例等內容,需要的朋友可以參考下
    2014-09-09
  • C語言實現繪制繞線畫的示例代碼

    C語言實現繪制繞線畫的示例代碼

    繞線畫簡單點來說,就是在木板上釘一圈釘子,通過繞線進行構圖,最終呈現出一幅圖像。本文將用C語言實現這一效果,感興趣的小伙伴可以嘗試一下
    2022-11-11
  • C++編寫實現圖書管理系統(tǒng)

    C++編寫實現圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++編寫實現圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

大冶市| 福清市| 新安县| 耿马| 新建县| 合肥市| 和硕县| 和硕县| 洞头县| 顺昌县| 富顺县| 唐山市| 定远县| 边坝县| 太保市| 女性| 葫芦岛市| 龙门县| 兖州市| 循化| 文水县| 万荣县| 奈曼旗| 比如县| 梓潼县| 玛纳斯县| 珠海市| 上高县| 新竹县| 汉沽区| 衡东县| 庆阳市| 玛沁县| 泰宁县| 会宁县| 繁峙县| 横山县| 建始县| 澳门| 含山县| 道孚县|