1. 程式人生 > >c++ extern "C"

c++ extern "C"

一般我們都將函式宣告放在標頭檔案,當我們的函式有可能被C或C++使用時,我們無法確定被誰呼叫,使得不能確定是否要將函式宣告在extern "C"裡,所以,我們可以新增

#ifdef __cplusplus  //用預編譯選項來確定使用哪種編譯器


 extern "C"


 {


 #endif


//函式宣告


#ifdef __cplusplus


 }


 #endif


這樣的話這個檔案無論是被C或C++呼叫都可以,不會出現上面的那個錯誤:error C2059: syntax error : 'string'。


如果我們注意到,很多標頭檔案都有這樣的用法,比如string.h,等等。


//test.h


#ifdef __cplusplus


#include <iostream>


using namespace std;


 extern "C"


 {


 #endif


void mytest();


#ifdef __cplusplus


 }


 #endif


這樣,可以將mytest()的實現放在.c或者.cpp檔案中,可以在.c或者.cpp檔案中include "test.h"後使用標頭檔案裡面的函式,而不會出現編譯錯誤。


//test.c


#include "test.h"


void mytest()


{


#ifdef __cplusplus


 cout << "cout mytest extern ok " << endl;


#else


 printf("printf mytest extern ok n");


#endif


}


//main.cpp


#include "test.h"


int main()


{


 mytest();


 return 0;


}