由於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...