当一个工程中既有c文件又有c++文件时,c++文件里有调用c文件中定义的函数或使用其全局变量时:例如在c文件中定义了一个变量和一个函数:
/*test.c*/
......
int test;
int test()
{
printf("test"):
return 1;
}
......
在另一个c++文件中引用上面c文件定义的全局变量和函数
/*test.cpp**/
......
extern int test;
extern int test();
test = 1;
test();
......
这时编译连接会出现link 2001, unresolved symbol
错误的原因:c编译器和c++编译器在内部对变量的表示方式是不一样的。正确的做法是:
/*test.cpp**/
......
extern "C"
{
int test;
int test();
}
test = 1;
test();
......
反过来在c文件中引用c++文件中定义的函数也有这个问题。