------- 点击转到转载来源 --------
想一想,如果C++程序要调用一个已经编译好的C程函数时,该怎么操作呢?
如果有一个C函数的声明是这样的:
void foo(int x, bool y)
该函数在C编译器编译后在库中的名字为 "__foo";
该函数在C++编译器编译后在库中的名字为"__foo_int_bool" ,之所以C++编译器这样操作,是因为C++支持重载和类型安全;
由于在这两种不同编译下,函数的名字不同,所以C++程序不能直接调用C函数,于是C++提供了一个连接交换符号“extern C”来解决这个问题;
比如:
extern "C"
{
void foo(int x,bool y);
..................//其他函数
}
或者
extern "C"
{
#include "myHeadr.h";
..................//其他的C头文件
}
这就告诉C++编译器,这是个C连接,应该到库中找名字为“__foo”的函数而不是"__foo_int/_bool"的函数。