VS2015中 fatal error C1853: “Debug\XXX.pch”预编译头文件来自编译器的早期版本

在VS2015的项目中,其源文件中即包括c文件也包括cpp文件时,编译项目会报错,其报错信息为“fatal error C1853: “Debug\netcat.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)”。产生该错误的主要原因是编译器对c文件和cpp文件采用了不同的编译方式。

1 编译方式

作为面向对象的语言,C++支持函数的重载。例如,在C++文件中有如下函数

void foo(int x, int y);

则C++编译器对该函数编译后的函数名类似于_foo_int_int这样既包含文件名又包含参数类型的格式,用这种方式来实现函数的重载。而对于C语言,由于其不支持函数重载,故C编译器编译后的foo()函数其函数名为_foo。可以通过extern “C”,将C++编译器下使用C编译方式。

2 预编译头

对于每个cpp文件,C++编译器是对其进行单独编译的。而对于文件中的#include包含的头文件等代码要进行文本替换,生成编译单元。而头文件可能被多个cpp文件包含,这样,每次编译cpp文件时,都要对头文件进行一次编译,也就是说,头文件被多次重复编译,浪费了编译时间。因此,C++编译器使用预编译(precompiled)的方式,预先把这些头文件进行编译,得到一个pch文件(precompiled header),当包含该头文件的cpp文件被编译时,只需使用该头文件对应的pch文件即可,无需再对头文件进行重复编译。

3 不适用预编译头

从前面提到的报错信息可知,C++编译器不兼容C文件的预编译头。因此,可以将C文件设置为不适用预编译头。在VS2015中选中C文件,在右键菜单中选择“属性”,之后在属性页窗口的左侧“配置属性”中选择“C/C++->预编译头”,在右侧的“预编译头”栏中选择“不适用预编译头”,如图1所示。

图1 不使用预编译头

 

最后,点击窗口中的“应用”和“确定”两个按键即可。

发布了314 篇原创文章 · 获赞 206 · 访问量 61万+

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/102716018
今日推荐