c++知識點–extern “C”的作用

來源:互聯網
上載者:User

在 c++ 或者 c 的原始碼中,經常看到 extern "C"這樣的寫法,主要原因是各個編譯器的名字改編方式不同,下面是來自:
http://blog.csdn.net/vinep/archive/2009/02/17/3899780.aspx 一篇原文,粘貼一下,已備查看。
 

以int func(int, int)為例,C的編譯器會將名字改編為_func, 而C++的編譯器會改編為_func_int_int 或_funcii(各編譯器不同)。如果這個函數在C中編譯成庫,目標檔案中函數名為_func,當這個函數中C++中被調用時,C++的編譯器就會到目標檔案中尋找_funcii,結果找不到,出錯。所以為了防止這種問題,在C++調用時,將函式宣告前加個extern "C" 告訴C++的編譯器,不要對名字再進修飾,而直接去找_func。因為C、C++的編譯器對函數名的修飾不同,為了保證在C、C++中編寫的函數能夠被互相調用,所以採用這個

連結指示符

同樣在C++中編譯的函數,如果想讓C來使用,通常也加上extern "C"在編譯時間將函數名按C的風格進行修飾。通常C中編寫的函數如果有在其它語言中使用的可能,通常會有下面形式的聲明:#ifdef  __cplusplusextern "C" {#endif/**** some declaration or so *****/#ifdef  __cplusplus    }#endif  /* end of __cplusplus */即在聲明時已經加上extern "C" 而不需要調用時麻煩。例如在VC++中調用C的庫函數就不用作特別的聲明。extern "C"的使用要點

 

 

 

 

 

 

 

 

1. 可以是單一語句
    extern "C" double sqrt(double);
2. 可以是複合陳述式, 相當於複合陳述式中的聲明都加了extern "C"
    extern "C"
   {
      double sqrt(double);
      int min(int, int);
  }
3.可以包含標頭檔,相當於標頭檔中的聲明都加了extern "C"
   extern "C"
  {
    #i nclude <cmath>
  }
4. 不可以將extern "C" 添加在函數內部
5. 如果函數有多個聲明,可以都加extern "C", 也可以只出現在第一次聲明中,後面的聲明會接受第一個連結指示符的規則。
6. 除extern "C", 還有extern "FORTRAN" 等。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.