C和C 混合程式設計

2021-09-13 01:17:06 字數 1310 閱讀 3164

《如何用c語言封裝 c++的類,在 c裡面使用》

《stm32 —c與c++混合開發》

在嵌入式領域,c和c++混合程式設計還是很常見的

一、c++呼叫c的函式

這個很簡單,把c檔案對應的**件,全部用extern  "c" {}包起來就是了

#ifdef  __cplusplus

extern "c"

#endif

二、c呼叫c++的函式

1、c++中的非成員函式、非過載函式

這種情形是最簡單的情形,只要把c++函式的定義和宣告前面加extern  "c"就能夠被c呼叫。

// c++ 檔案:

extern "c" int foo( int x );

extern "c" int foo( int x )

這樣,編譯器會將foo函式編譯成類似_foo符號,而不會編譯成類似_foo_int符號

則c可以這樣呼叫c++函式

// c 檔案:

int foo( int x );

void cc( int x )

2、c++中非成員函式、過載函式

原理是,把c++的過載函式,包裝成異名函式

// c++ 檔案

void foo( int x );

void foo( float x );

extern "c" void foo_i( int x )

extern "c" void foo_f( float x )

// c 檔案這樣呼叫c++的過載函式

void foo_i( int x );

void foo_f( float x );

void ccc( int x1, float x2 )

3、c++中的成員函式

這才是我們最需要的一種情形,原理無非又是包裝,把成員函式包裝成普通函式。

(想辦法呼叫這個類的成員函式)

class round

(中間層,把類的成員函式封裝成可以供c呼叫的形式)

round round;

extern "c" float getarea(float r)

(中間層,把類的成員函式封裝成可以供c呼叫的形式)

extern "c" float getarea(float r);

(本c檔案可以呼叫b.h中的c++函式)

#include "b.h"

int main(void)

C 和C 混合程式設計

由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1int ...

C 和C 混合程式設計

由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1 int...

C和C 混合程式設計

1 pragma once 關於 pragma once vc 及g 都支援,大膽的用吧。匯出型別必須一致.要麼是c的,要麼是c 2.cplusplus 這個是必須的 ifdef cplusplus extern c endif c 中呼叫c的 1 對於 c 中非類的成員函式,可以簡單的在函式宣告前...