2016年8月3日 星期三

混合C與C++的程式

參考這個網站的:
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

在c++的程式內,使用C++標準函式庫,需要標明namespace:
#include <>; //cstdio

int main(){
...
std::printf(...);
...
}


在c++的程式內,使用C標準函式庫,用法跟c一樣:
#include <> //stdio.h

int main(){
...
printf(...);
...
}


在c++的程式內,使用C函式庫:
extern "C" {
#include "" //my-header.h
}

int main(){
...
my_func(...);
...
}


若要同一個header file給c與c++直接使用,也可以在header內加上exter "C",並判斷目前是c或c++使用

------------------------------
//my-header.h
#ifdef __cplusplus
extern "C" {
#endif

my-function(...);

#ifdef __cplusplus
}
#endif

------------------------------
//main.cpp

#include "" //my-header.h

int main(){
...
my_func(...);
...
}
------------------------------

若不想要include my-header.h,只要使用某幾個c function,可以直接宣告完整的prototype
//main.cpp
extern "C" my_func(int a, int b, int c);
or
//main.cpp
extern "C" {
my_func1(int a, int b, int c);
my_func2(int a, int b, int c);
my_func3(int a, int b, int c);
}
用到時直接用
//main.cpp
my_func1(...);

若要讓c程式call到c的某個function, 使用extern "C"可以使complier將此function給linker的資訊使用c的格式

//my.cpp
extern "C" my_cpp_func(int a, int b);

my_cpp_func(int a, int b){
...
}





沒有留言:

張貼留言