在同乙個程式中結合C

2021-08-08 12:22:34 字數 1140 閱讀 6634

在同乙個程式中結合c++和c

在同乙個程式中結合c++以及c我們需要注意的4大主題:

1.name mangling (名稱重整)

2.statics(靜態物件初始化)

3.動態記憶體分配

4.資料結構的相容性。

對於名稱重整

我們知道在c++中由於過載的存在我們需要對函式的名稱進行重整,但是c的函式我們就不需要重整。那麼當我們在我們的c++程式中引入乙個c的標頭檔案,裡面含有一些函式,當我們呼叫這些函式的時候,編譯器會重整這些函式,由於c的實現檔案中並不會對名稱進行重整,所以就會出現鏈結錯誤。乙個有效的做法是在c的標頭檔案中加入extern "c"以讓這些函式不需要做名稱重整。下面是乙個可能用於c++程式的c標頭檔案的典型寫法:

#ifdef __cplusplus

extern "c"

#endif

靜態物件初始化

我們首先明確,許多**需要在main之前main之後執行,如:static class 物件,全域性物件,namesapce 內的物件以及檔案範圍內的物件。這個過程叫做static initialization.一般的c++編譯器會把這些操作安插在main函式的之前和之後以完成這些動作,所以乙個經過編譯的main看起來像這樣:

int main(int argc,char *argv)

所以當我們在嘗試撰寫c++軟體的任何一部分的時候,都應該嘗試寫main。

當我們寫的c**,需要呼叫乙個c++庫的標頭檔案時,我們可能需要這樣的寫法用來保證靜態物件的初始化:

extern "c"

int realmain();//用c語言完成的main函式

int main //c++main

動態記憶體分配

用c++ new分配的記憶體呼叫delete 用malloc分配的記憶體呼叫free!

資料結構的相容性

在c++的struct加入虛函式之後,c++的struct和c的struct就不再相容了

php 在同乙個表單中新增和修改

我的方法是在同乙個表單中做文章,下面的例子是我用 thinkphp框架寫的 如果你不懂thinkphp,沒有關係,我只是想說說我的解決方案.前台如果是這樣的.說明,表示提交到article控制器的add方法.進行接收操作.就是這樣乙個簡單的表單,我們在後台直接接收資料.public function...

同乙個系統中啟動多個tomcat

需要在同一系統裡啟動多個tomcat,應該怎麼處理?tomcat是個服務程式,需要占用幾個通訊埠,所以預設情況是不能啟動多個tomcat,如果要啟動多個tomcat,需要修改配置檔案,通過在配置檔案設定不同的通訊埠就可以做到.檔案 tomcat home conf server.xml 是tomca...

C 多個窗體共享同乙個SerialPort控制項

在使用serialport控制項時,能夠發現雖然可以把它拖拽到視窗上,但它並不會顯示在窗體上,而是在窗體的下面,這說明此控制項並不是乙個視覺化的控制項,類似的控制項還有timer。正是由於serialport的這種特性,使得我們可以不必採用拖拽的方式新增此控制項,而是直接在 中新增。現在有兩個窗體,...