extern "c" 的作用

來源:互聯網
上載者:User

標籤:style   blog   color   os   io   strong   檔案   div   log   

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

原理:C和C++編譯器編譯之後,函數名會編譯成不同的名字,連結階段名字尋找會找不到目標,後面執行個體中會詳解。

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

兩個源檔案分別編譯成.o檔案,再連結成執行檔案。連結.o檔案產生執行檔案時,必須得用g++。

 

執行個體:

在源檔案中聲明的,沒有頭檔案

.c檔案定義的函數,.cpp檔案調用:

1 //.c檔案定義的函數2 extern int myadd(int a, int b);3 4 int myadd(int a, int b)5 {6     return a+b;7 }
 1 //.cpp檔案調用 2 #include <iostream> 3 using namespace std; 4  5 extern "C" int myadd(int a, int b); 6  7 int main() 8 { 9     cout << myadd(3, 7) << endl;10     return 0;11 }

 

.cpp檔案定義的函數,.c檔案調用:

1 //.cpp檔案定義的函數2 extern "C" int myadd(int a, int b);3 4 int myadd(int a, int b)5 {6     return a + b;7 }
 1 //.c檔案調用 2 #include <stdio.h> 3  4 extern int myadd(int a, int b); 5  6 int main() 7 { 8     printf("%d\n", myadd(3, 7)); 9     return 0;10 }

 

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

1 //.cpp檔案的包含方式2 extern "C"3 {4     #include "myHead.h"5 }

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

 

原理補充:C檔案中,上述函數編譯之後的函數名為類似於_myadd的形式,而CPP的編譯之後函數名為類似於_myadd_int_int的形式,因為CPP要支援重載,用這種方式來區別重載的函數。

 

extern "c" 的作用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.