當一個工程中既有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++文件中定義的函數也有這個問題。