c++ extern "C"
阿新 • • 發佈:2019-02-17
一般我們都將函式宣告放在標頭檔案,當我們的函式有可能被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;
}
#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;
}