#ifdef __cplusplus與extern “C”的解釋

來源:互聯網
上載者:User

時常在cpp的代碼之中看到這樣的代碼:

#ifdef __cplusplus
extern "C" {
#endif

//一段代碼

#ifdef __cplusplus
}
#endif
  

    這樣的代碼到底是什麼意思呢?首先,其中__cplusplus是C++編譯器的保留宏定義.就是說C++編譯器認為這個宏已經定義了.那麼定義了這個宏的話表示這是一段cpp的代碼

,也就是說,

上面的代碼的含義是:

如果這是一段cpp的代碼,那麼加入 extern "C"{  和  }   處理其中的代碼;

                   extern "C" {
                     #endif

                     //一段代碼

                   }
                   #endif             //* extern "C" */

如果這是一段c的代碼,那麼跳過extern "C"{  和 } ,編譯:

                  #endif             //* extern "C" */

                 //一段代碼

                 #endif            //

  要明白為何使用extern "C",還得從cpp中對函數的重載處理開始說起。在c++中,為了支援重載機制,在編譯產生的彙編碼中,要對函數的名字進行一些處理,加入比如函數

的傳回型別等等.而在C中,只是簡單的函數名字而已,不會加入其他的資訊.也就是說:C++和C對產生的函數名字的處理是不一樣的. 目的就是主要實現C與C++的相互調用問題。

c.h的實現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif

void C_fun();

#ifdef __cplusplus
}
#endif

#endif
-----------------------------------
c.c的實現
#include "c.h"
void C_fun()
{
}
------------------------------------
在cpp.cpp中調用c.c中的C_test()
cpp.cpp的實現
#include "c.h"
int main()
{
     C_fun()
}
其中__cplusplus是C++編譯器的保留宏定義.就是說C++編譯器認為這個宏已經定義了.
所以關鍵是extern "C" {}
extern "C"是告訴C++編譯器件括弧裡的東東是按照C的obj檔案格式編譯的,要串連的話按照C的命名規則去找.
==========================
那麼C中是如何調用C++中的函數cpp_fun()呢?
因為先有C後有C++, 所以只能從C++的代碼中考慮了.
加入C++中的函數或變數有可能被C中的檔案調用,則應該這樣寫,也是用extern "C"{}
不過是代碼中要加,標頭檔也要加,因為可能是C++中也調用
--------------------------------------
cpp.h的實現

#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif

void CPP_fun();

#ifdef __cplusplus
}
#endif

.-------------------------------------------
Cpp.cpp的實現
extern "C" {    //告訴C+++編譯器,擴號裡按照C的命名規則編譯
void CPP_fun()
{
     .....
}
 
 
總結
  C和C++對函數的處理方式是不同的.extern "C"是使C++能夠調用C寫作的庫檔案的一個手段,如果要對編譯器提示使用C的方式來處理函數的話,那麼就要使用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.