问题核心:
extern "C"{int a;} 与 extern "C" int a; 有区别么?
extern "C"{...} 那么大括号内的内容是不是只是声明?
出现问题的场景:
VC6.0 下, a.c 文件内容:
int a = 10;
b.cpp文件内容:
#include <stdio.h>
#if 0
extern "C"
{
int a;
}
#else
extern "C" int a;
#endif
int main()
{
printf("%d\n",a);
return 0;
}
1. 如果#if 0,编译a.c , b.cpp 链接,没问题,运行 输出10.
2. 如果#if 1,编译a.c , b.cpp 链接,错误:error LNK2005: _a already defined in a.obj
提示:每次编译前把原来的obj都清除。