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

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

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

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

作用:實現(xiàn)C和C++混合編程。

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

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

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

實例:

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

.c文件定義的函數(shù),.cpp文件調(diào)用:

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

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

.cpp文件定義的函數(shù),.c文件調(diào)用:

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

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

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

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

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

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

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

相關(guān)文章

  • C++如何獲取當(dāng)前系統(tǒng)時間及格式化輸出

    C++如何獲取當(dāng)前系統(tǒng)時間及格式化輸出

    這篇文章主要介紹了C++如何獲取當(dāng)前系統(tǒng)時間及格式化輸出的實例代碼,主要用到time()及strftime()函數(shù),通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C++深入探索類真正的形態(tài)之struct與class

    C++深入探索類真正的形態(tài)之struct與class

    前邊我們所定義的類,均是使用struct關(guān)鍵字來定義,但是C++中真正用于定義類的關(guān)鍵字為class,因為要C++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同
    2022-04-04
  • C++用兩個棧實現(xiàn)一個隊列(面試官的小結(jié))

    C++用兩個棧實現(xiàn)一個隊列(面試官的小結(jié))

    這篇文章主要給大家介紹了關(guān)于C++用兩個棧實現(xiàn)一個隊列的相關(guān)資料,這是來自一名面試官的小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C++?自定義單向鏈表?ListNode詳情

    C++?自定義單向鏈表?ListNode詳情

    這篇文章主要介紹了C++?自定義單向鏈表?ListNode詳情,文章將介紹鏈表中不帶頭結(jié)點,沒有存放鏈表長度的節(jié)點,從頭結(jié)點開始就存放數(shù)據(jù)得一種,具有一定得參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • C/C++中*和&的用法詳解

    C/C++中*和&的用法詳解

    在本篇文章中我們給大家總結(jié)了C/C++中*和&的用法以及相關(guān)的代碼分享,有興趣的朋友趕緊學(xué)習(xí)下吧。
    2018-03-03
  • C++實現(xiàn)簡單的通訊錄管理系統(tǒng)

    C++實現(xiàn)簡單的通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單的通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 解析鴻蒙輕內(nèi)核靜態(tài)內(nèi)存的使用

    解析鴻蒙輕內(nèi)核靜態(tài)內(nèi)存的使用

    摘要:靜態(tài)內(nèi)存實質(zhì)上是一個靜態(tài)數(shù)組,靜態(tài)內(nèi)存池內(nèi)的塊大小在初始化時設(shè)定,初始化后塊大小不可變更。靜態(tài)內(nèi)存池由一個控制塊和若干相同大小的內(nèi)存塊構(gòu)成。控制塊位于內(nèi)存池頭部,用于內(nèi)存塊管理。內(nèi)存塊的申請和釋放以塊大小為粒度
    2021-06-06
  • C/C++中CONST用法總結(jié)(推薦)

    C/C++中CONST用法總結(jié)(推薦)

    這篇文章主要介紹了C/C++中CONST用法總結(jié)(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-07-07
  • opencv3/C++圖像濾波實現(xiàn)方式

    opencv3/C++圖像濾波實現(xiàn)方式

    今天小編就為大家分享一篇opencv3/C++圖像濾波實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++ 回調(diào)接口設(shè)計和二進制兼容詳細(xì)

    C++ 回調(diào)接口設(shè)計和二進制兼容詳細(xì)

    再開發(fā)視頻編輯 SDK,SDK的回調(diào)接口設(shè)計成 C 風(fēng)格,結(jié)構(gòu)中放著一些函數(shù)指針,既然對外接口是 C++,為什么不直接使用 C++ 的虛函數(shù)?這篇文章便對這一問題做個詳細(xì)介紹,需要的朋友可以參考一下
    2021-09-09

最新評論