我們經常會在c/c++svjahslg程式中見到extern "c",這是乙個很重要的概念。本文就來以例項形式講述c/c++中extern "c"的作用。分享給大家供大家參考之用。具體分析如下:
作用:實現c和c++混合程式設計。
原理:c和c++編譯器編譯之後,函式名會編譯成不同的名字,鏈結階段名字查詢會找不到目標,後面例項中會詳解。
用法:①.c檔案中定義的函式,.cpp檔案要呼叫時,該.cpp檔案中要用extern "c"宣告該函式;
②.反過來,.cpp檔案中定義的函式,.c檔案要呼叫,則同樣要在.cpp檔案中用extern "c"宣告,.c檔案只用普通的extern宣告。
兩個原始檔分別編譯成.o檔案,再鏈結成執行檔案。鏈結.o檔案生成執行檔案時,必須得用g++。
例項:在原始檔中宣告的,沒有標頭檔案
.c檔案定義的函式,.cpp檔案呼叫:
//.c檔案定義的函式
extern int myadd(int a, int b);
int myadd(int a, int b)
//.cpp檔案呼叫
#include
using namespace std;
extern "c" int myadd(int a, int b);
int main()
.cpp檔案定義的函式,.c檔案呼叫:
//.cpp檔案定義的函式
extern "c" int程式設計客棧 myadd(int a, int b);
int myadd(int a, int b)
//.c程式設計客棧檔案呼叫
#include
extern i程式設計客棧nt myadd(int a, int b);
int main()
如果在標頭檔案中宣告,則.c檔案正常的包含該標頭檔案,.cpp檔案應該用
//.cpp檔案的包含方式
extern "c"
的方式來包含標頭檔案,該標頭檔案中宣告的函式都為c方式編譯。
原理補充:c檔案中,上述函式編譯之後的函式名為類似於_myadd的形式,而cpp的編譯之後函式名為類似於_myadd_int_int的形式,因為cpp要支援過載,用這種方式來區別過載的函式。
本文標題: c/c++中extern "c" 的作用分析
本文位址: /ruanjian/c/113279.html
QT C 中extern C 的作用
前些天,程式設計序是用到了很久以前寫的c程式,想把裡面的函式利用起來,連線發現出現了找不到具體函式的錯誤 以下是假設舊的c程式庫 c的標頭檔案 c.h ifndef c h define c h extern int add int x,int y endif c的原始檔 c.c int add i...
QT C 中extern C 的作用
前些天,程式設計序是用到了很久以前寫的c程式,想把裡面的函式利用起來,連線發現出現了找不到具體函式的錯誤 以下是假設舊的c程式庫 c的標頭檔案 cpp view plain copy c.h ifndef c h define c h extern intadd intx,inty endif c的...
extern「c」宣告的作用
extern c 簡介extern c 包含雙重含義,從字面上即可得到 首先,被它修飾的目標是 extern 的 其次,被它修飾的目標是 c 的。讓我們來詳細解讀這兩重含義。含義 1 被extern c 限定的函式或變數是extern型別的 extern是c c 語言中表明函式和全域性變數作用範圍 ...