C 和 C++ 混合編程

來源:互聯網
上載者:User

http://fangzhzh.info/blog/mixing-c-and-cpp-programming.html

在最近的arm開發中,因為一些特定的需求,需要使用從C檔案中調用以前C++程式中的類和方法。參考網上的一些資料,本文1將相關的知識點簡要總結如下:c&c++混合編程的注意事項,在c++函數中調用c函數的方法,在c函數中調用c++函數的方法,在c函數中調用C++對象及其中資料的方法。並在本文的末尾給出C和C++混合編程的例子,例子分別以Makefile和VC6.0工程的形式展現。 注意事項

本部分是從較高的角度需要注意的問題: C和C++編譯器必須要相容 C和C++編譯器要有相容的標頭檔和運行庫

建議使用同一個供貨商的編譯器:即如果使用的gnu,那麼C編譯器是gcc,C++編譯器是g++。 如何在C++代碼中包含標準C標頭檔。

包含一個標準的標頭檔(如<cstdio>),不需要任何特別的處理。

// c++ 代碼#include <cstdio>               // 標頭檔包含沒啥特別處理int main(){  std::printf("Hello world\n");// 函數調用沒啥特別處理  return 0;}

如果,你認為std::printf中的std::很奇怪,那麼最好的方式就是“習慣它”。換句話說,這是使用標準庫函數的標準方法,所以習慣這種用法就好了。

但是,如果你想要使用C++編譯器來編譯C代碼的話,就不用使用這麼奇怪的std::printf()了。這種情況下,你需要包含<stdio.h>,而不是<cstdio>,神奇的命名空間會替你解決所有事情。代碼如下:

//使用C++編譯器編譯的C代碼#include <stdio.h>               // 標頭檔包含沒啥特別處理int main(){  printf("Hello world\n");// 函數調用沒啥特別處理  return 0;}

補充:如果使用非標準庫的標頭檔的話,關注點會有所改變,非標準庫的使用有以下兩種情況:不能修改標頭檔和能夠修改標頭檔。 如何在C++代碼中包含非系統C標頭檔。

如果在C++系統中使用一個非系統提供的c標頭檔時,需要將#include代碼用extern “C”{}包含起來,這個聲明告訴C++編譯器,包含在內的是C函數的標頭檔。

//C++ 代碼extern "C" {//get declaration for f(int i, char c, float x)  #include "my-c-code.h"}int main(){  f(7, 'x', 3.14);   //正常調用}

補充:可能出現的不同情況系統提供的標準標頭檔(比如<cstdio>)和能夠修改標頭檔。 如何修改C標頭檔,以使之方便的被C++代碼#incldue。

如果需要包含一個非系統的C標頭檔,同時,你擁有修改此檔案的許可權,那麼強烈建議在檔案的內部加上extern “C” {…},以使用C++程式員能夠方便的使用。當然,作為C編譯器,是不理解什麼叫extern “C”的,因此,需要將extern “C”使用#ifdef包起來。 第一步:在C標頭檔的最頂端加上如下代碼(__cplusplus只存在於C++編譯器下)

#ifdef __cplusplusextern "C" {#endif
第二步:在C標頭檔的最尾部加入如下代碼
#ifdef __cplusplus}#endif
現在,就可以在C++代碼中使用C標頭檔,而不用使用任何蹩腳的extern “C” {}
// this is c++ code//get the declaration of f(int i, char c, float x)#include "my-c-mode.h"int main(){  f(7, 'x', 3.14);   //正常調用}

補充:可能出現的不同情況系統提供的標準標頭檔(比如<cstdio>)和不能修改標頭檔。

相關文章

聯繫我們

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