C/C++中extern "C" 的作用分析
我們經(jīng)常會在C/C++程序中見到extern "C",這是一個很重要的概念。本文就來以實例形式講述C/C++中extern "C"的作用。分享給大家供大家參考之用。具體分析如下:
作用:實現(xiàn)C和C++混合編程。
原理:C和C++編譯器編譯之后,函數(shù)名會編譯成不同的名字,鏈接階段名字查找會找不到目標,后面實例中會詳解。
用法:
①.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++深入探索類真正的形態(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é))
這篇文章主要給大家介紹了關(guān)于C++用兩個棧實現(xiàn)一個隊列的相關(guān)資料,這是來自一名面試官的小結(jié),文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用C++具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧2019-05-05

