C中引用C++语言中的函数,这个怎么回事?
在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C ",但是在C语言中不能直接引用声明了extern "C "的该头文件,应该仅将C文件中将C++中定义的extern "C "函数声明为extern类型。
笔者编写的C引用C++函数例子工程中包含的三个文件的源代码如下:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C " int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#i nclude "cppExample.h "
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#i nclude "cExample.h " */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
在cFile.c中不包含头文件,编译时找不到add的定义啊?
应该仅将C文件中将C++中定义的extern "C "函数声明为extern类型,这句话没理解,请问怎么解?
[解决办法]
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
#ifdef __cplusplus
extern "C " {
#endif
int add( int x, int y );
#ifdef __cplusplus
}
#endif
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h "
int add(int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
#include "cppExample.h "
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}