替代链接¶
用C语言写的即可以在C语言中使用,又可以在C++中使用。因为C++和C语言还是不同的,所以需要extern "C"替代链接说明。
在C++语言中调用C语言的函数
例¶
在.c文件写全局函数float f(int a, int b){}
-
用C语言调用的时候,要添加声明:
float f(int a, int b);
-
C++调用的时候需要extern "c":
extern "C" float f(int a, int b);
C或C++都有四个重要步骤
预处理 —> 编译 —> 汇编 —> 链接
问题在于后三个步骤。
C语言变成的汇编和C++变成的汇编是不一样的。
例如上面的函数
C汇编可能会变成_f(...)
C++汇编可能会变成_f_int_int(...)
在汇编里名称就变了,微软或其它公司不同的编译器变成的是不一样的。
一般情况下 源文件会有一个头文件,函数的声明写在头文件中。使用时引入头文件,预处理会把头文件替换成里面的函数声明。
可以在头文件中判断 是否是C++ 是的话 就前面加上extern "C"
#ifdef __cplusplus
extern "C"
{
#endif
float f(int a, int b);
void g();
void k();
#ifdef __cplusplus
}
#endif
这样的头文件即可以用在C语言又可以用在C++。
C语言的库 即可以用在C语言又可以用在C++里。