当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)(致命错误C1853: “filename.pch”预编译头文件来自编译器的早期版本,或者预编译头为C++ 而在C 中使用它(或相反))。

该错误是因为当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式(主要是因为对函数声明的处理方式不同),因而不能共用一个预编译头文件。在 VC++ 中,默认的预编译头文件是针对 C++ 的 (stdafx.h 和 stdafx.cpp),当然也可以创建针对 C 的预编译头。有趣的是,在旧版的 VC++ 中,这个错误的提示很具有误导性:fatal error C1853: 'xxx.pch' is not a precompiled header file created with this compiler. 常常让人摸不着头脑。应该说,在新版中的这个提示是有所改进的。不过在网上搜索一番,对这个问题往往都是建议对整个项目取消预编译头的设置。这显然不是一个好的解决方案。对于一个比较大的工程来说,使用预编译头可以使总的编译时间大大减少。因而保留预编译头的设置才是比较好的解决方案。搜索 MSDN,针对不同的情况,可以有不同的解决方案:

本人是用方法已解决的

方案1:适用于绝大多数文件是 .cpp 或绝大多数文件是.c的情况。在这种情况下,将少数的不同类文件设为不使用预编译头是比较平衡的做法,方法是:对于 VC++6.0,在 FileView 里对要取消预编译头的 .c (或 .cpp) 文件点右键,选择 settings,在弹出的对话框右边选择 category 为 precompiled headers,再设置选项为 not using ...;(对于 VS2005,则在 solution explorer 中对相应文件点右键选择 properties,在 precompiled headers 项下设置 not using... 即可。如果需要设置多个文件,则可以按住 Ctrl 键再同时选中这些文件并设置)PS:解释如下点击项目 点击属性 然后选择C/C++   预编译头 创建使用头文件 不使用预编译头文件

方案2:影响的文件比较多,则把它们都设置禁止预编译头的话仍然会使项目总体的编译速度大大降低,得不偿失。这时考虑可以为这组文件建立专用的预编译头。在 VC++ 极早期版本(1.5及以前版本)中是支持单个工程中建立分别针对 .c 和 .cpp 的预编译头的,但之后的版本中只支持单独的预编译头。在这种情况下,我们可以在workspace(或 solution)中建立一个新的静态链接库 (Static Library) 工程,将所有的 .c 文件独立出来加入到该工程中单独编译,这样就可以在该静态链接库中针对 .c 文件创建预编译头。但是这样做在一定程度上需要被独立出来的代码在逻辑上是属于同一模块中的,这样才便于维护。不过从设计的角度来说,这个要求一般是满足的,否则就应考虑下项目的总体设计了:P 最后别忘了设置原项目的依赖项 (dependency) 为独立出来的这个静态库项目。

预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)相关推荐

  1. 预编译头文件来自编译器的早期版本_Debug

    1.报错形式 用Visual Studio2010 编写C++程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 2.解决方法 3.原因分析 ...

  2. 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)...

    当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal err ...

  3. error C1853: “Debug\BigBuffer.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)...

    <pre id="best-content-1299104064" mb-10"="" style="font-size: 14px; ...

  4. fatal error C1853 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

  5. 错误:error C1853:Debug\...pch预编译头文件来自编译器版本,或者预编译头C++而在C中使用它

    错误:error C1853:"Debug\...pch"预编译头文件来自编译器版本,或者预编译头C++而在C中使用它(或相反) 原因: 因为当项目中混合了.cpp和.h文件时,编 ...

  6. 嵌入式linux头文件,飞凌嵌入式知识汇092期:C工程的组织方式(头文件的功能)以及Linux下常用的头文件的作用...

    1.1每个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.另一个文件用于保存程序的实现(implementation),称为定义(definition ...

  7. 缺失头文件bit/c++config.h关于Arduinoi IDE编译类如Nodemcu板等报错

    关于Arduinoi IDE编译类如Nodemcu板等报错--缺失头文件#include <bits / c ++ config.h> 错误信息 来自C:\ ProgramData \ M ...

  8. 单片机sleep函数的头文件_c语言的 sleep函数到底在哪个头文件里啊

    展开全部 在里面. 在VC中使用时,sleep函数的头文件为windows.h,在Linux下,gcc编译器中,使用的头文件因gcc版本62616964757a686964616fe59b9ee7ad ...

  9. linux u8 头文件,2019-12-11 转载TCP/IP编程常用C语言头文件

    网络编程的头文件(这里所有的头文件都在/usr/include目录下面) 经常被一些头文件搞大,不知到到哪个头文件去找结构.这里做个总结 ---------------- 版权声明:本文为CSDN博主 ...

最新文章

  1. Linux Kernel 3.10内核源码分析--块设备层request plug/unplug机制
  2. java生成xml_java 生成xml
  3. 肝货!你想要的资源这里都有!
  4. Java的原始字符串文字
  5. 现代软件工程 第三章 【软件工程师的成长】练习与讨论
  6. Spark参数配置说明
  7. 数据库原理与应用 基于SQL Server 2005pdf
  8. 用数字ic产生正弦波的仿真尝试。
  9. 商品规格表设计_计算机毕业设计分享jsp企业销售管理系统
  10. GitHub备注油猴插件
  11. 如何缓解眼疲劳(眼疲劳敷眼睛是热敷还是冷敷)
  12. s5p4418的uboot网络无法使用问题解决
  13. 精准面试突击55:delete、drop、truncate有什么区别?
  14. mysql存储表情、微信小程序存储表情
  15. node.js入门之child_process子进程
  16. python人民币金额转汉字大写
  17. P2562kitty猫基因
  18. 重磅官宣:GitHub App 终于来了
  19. DEDE:ping服务插件破解版推广信息解密过程实录
  20. 毕设进度跟踪之开题报告

热门文章

  1. linux vg lv pv
  2. Java数据类型(基本数据类型)学习
  3. Oracle 建立包 和 包体
  4. 用boost库实现traceroute小工具
  5. maskView与CAGradientLayer那回事儿
  6. service mysqld start,Failed to start mysqld.service: Access denied
  7. Java中forEach, 用来遍历数组
  8. JavaScript indexOf() 方法 和 lastIndexOf() 方法
  9. MVC-05 Model(1)
  10. VS2003,VS2005,VS2008 低版本打开高版本的解决方案和工程文件