首先明确一点就是以.c为扩展名的源文件a.c(a代表文件名),vs按照C的编译方式进行编译;以.cpp为后缀的源文件a.cpp,按照C++的编译方式进行编译,而C++是面向对象的,支持函数重载,所以编译器对函数的处理和C有所不同。这个时候如果在另外一个源文件b.cpp中包含a.h时就会出现”无法解析的外部符号错误“,原因就是在b.cpp中a.h中的函数按照C++编译方式进行处理,在a.c中函数按照C的方式进行处理,所以找不到对应函数的定义(编译器处理后的函数名不同)。这时就需要extern ”C"对a.h进行包含,告诉编译器a.h中的函数按照C方式进行编译。
//a.h
void TestExternC();
//a.c
#include "a.h"
#include <stdio.h>
void TestExternC()
{
printf("test\n");
}
//b.cpp
extern "C"
{
#include "a.h"
}
int main()
{
TestExternC();
return 0;
}