跳转至

替代链接

用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++里。