如果C++程序要调用已经被编译后的C函数,该怎么办?假设某个C函数的声明如下:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern"C"来解决这个问题。
extern "C"
{
void *malloc(int);
char *strcpy(char *,const char *);
int printf(const char *,...);
int exit(int);
int strlen(const char *);
}
const char *str="hello";
void main()
{
char *s=(char *)malloc(strlen(str)+1);
strcpy(s,str);
printf("%s,word/n",s);
exit(0);
}
--摘自<<高质量C++编程>>
注意:并没有包含头文件
自己写动态库时,相应的输出函数都要写extern "C"链接指示符,要不然加载动态库时找不到相应的函数地址