在C中呼叫C 函式

2021-07-26 00:02:35 字數 2009 閱讀 1370

由於c編譯器與c++編譯器之間的區別十分巨大,因此二者之間不可以直接互相呼叫各自的函式介面。但是,使用extern "c"可以實現在c**中呼叫c++函式的功能,反之亦可。extern "c"告訴c++編譯器,將花括號中的**按照c語言的規則進行編譯與鏈結。

cppprint.cpp

cppprint.h

callcpp.c

其中cppprint.cpp中是c++**的實現,其中用iostream實現了列印hello world!的功能。這部分的**沒有需要特殊說明的地方,屬於一般的c++實現。

/*

* cppprint.h

* */

#ifndef cpp_print_h

#define cpp_print_h

#include

class printer ;

#endif // cpp_print_h

/* * cppprint.cpp

* */

#include

#include

#include "cppprint.h"

printer::printer()

: mstring("")

printer::printer(char* str)

: mstring(str)

printer::~printer()

void printer::print()

void printer::print(char* str)

std::cout

<< mstring << std::endl;

}

/*

* */

#include

#ifdef __cplusplus

extern

"c"

#endif

/* *

*/#include

#include

#include

#include

#include

#include "cppprint.h"

#ifdef __cplusplus

extern

"c" ;

printerref getprinter(char* str) else

return ref;

}void print(printerref ref)

void deleteprinter(printerref ref)

#ifdef __cplusplus

}#endif

/*

* callcpp.c

* */

int main()

將libcppprint.so複製到/usr/lib下。

$ sudo cp libcppprint.so /usr/lib

編譯c**

$ gcc callcpp.c -lcppprint -o callcpp

執行程式

$ ./callcpp

控制台輸出

printer@[0x25b0030] is constructed.

printer@[0x25b00a0] is constructed.

hello world!

welcome!

printer@[0x25b0030] is destructed.

printer@[0x25b00a0] is destructed.

ps:

實驗環境:

ubuntu 14.04 lts 64位

gcc與g++的版本均為4.4.7

在C 中呼叫windows API函式

在c 中呼叫windows api函式 對於windows 系統api函式的呼叫在程式設計中有時是必不可少的,各種程式語言都規範了呼叫的方法和介面,在c 語言中的呼叫方法如下 以下程式設計環境為visual studio net 1 在工程專案中新增乙個類新項,開啟這個類檔案,在檔案頭部加入對以下命...

C中呼叫C 函式

將 c 函式宣告為 extern c 在你的 c 裡做這個宣告 然後呼叫它 在你的 c 或者 c 裡呼叫 例如 c code extern c void f int void f int i 然後,你可以這樣使用 f c code void f int void cc int i f i 當然,這招...

在C程式中呼叫彙編函式

在趙炯的 linux核心完全剖析 中有乙個在c程式中呼叫彙編函式的介紹 執行as o callee.o callee.s的時候遇到錯誤 callee.s 7 error invalid instruction suffix for push 參考文章 感謝作者 在callee.s中加入 code32...