C++中使用.C 文件出错

当 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 (orvice 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解决的

方案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++   预编译头 创建使用头文件不使用预编译头文件(解决方案资源管理器-右击需要排除的c或cpp文件]-弹出属性菜单-展开C/C++-预编译头-创建/使用预编译头-选择不适用预编译头)

使用.c文件中的函数时 需加入

extern "C" 函数声明;

C++中使用.C 文件出错,布布扣,bubuko.com

时间: 2024-07-28 14:23:22

C++中使用.C 文件出错的相关文章

[转]ADT中通过DDMS导入文件出错ddms transfer error: Read-only file system,Failed to push selection: Read-only file system

[已解决] 原文  http://www.crifan.com/ddms_import_file_error_transfer_error_read_only_file_system/ 想要通过adt的ddms的file explorer去向adv中导入文件,结果出错: [2013-04-23 10:32:00 - ddms] transfer error: Read-only file system [2013-04-23 10:32:00] Failed to push selection:

“在 setroubleshoot 服务中读取信息时出错:没有那个文件或目录” 的解决办法

在学习鸟哥的LINUX私房菜(基础篇)第17.5.5 SELinux所需的服务 章节中 鸟哥提到: [[email protected] ~]# chkconfig --list setroubleshoot setroubleshoot 0:off 1:off 2:off 3:on 4:on 5:on 6:off # 我们癿 Linux 运作模式是在 3 戒 5 号,因此这两个要 on 卲可. 我的虚拟机为CentOS5.11, 但是我在测试的时候,出现如下信息: [[email protec

【Android】14.3 浏览手机中的所有文件夹和文件

分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 前面我们了解了内部存储.外部存储的含义,用一句话说,内部存储实际上是保存在"data"文件夹下,外部存储(SD卡)实际是保存在"sdcard"或者"storage"文件夹下. 这个例子演示如何将这些内部存储和外部存储的文件夹及其子文件架下的文件全部显示出来,类似于树形结构一层一层地向下看(例子没有实现返回上层的功能,或者说,仅仅实现了Android自带的文件浏览

MD3200存储中虚拟机数据文件丢失的数据恢复过程

简介: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服务瘫痪,虚拟机无法使用,故障环境为Windows Server 2012服务器,系统中部署了Hyper-V虚拟机环境,虚拟机的硬盘文件和配置文件放在朝阳区某托管中心托管的DELL MD3200存储中(注:硬盘600G*4,4T*1).MD3200存储是由4块600G硬盘组成的阵列,用作存储虚拟机的数据文件.单块4T硬盘用作虚拟机数据文件的备份. 故障: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服

AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

下面是ipad上的调试效果 下面是代码,代码中都有注释: #import <UIKit/UIKit.h>  #import <AVFoundation/AVFoundation.h>  #import <MediaPlayer/MediaPlayer.h>   @interface RootViewController : UIViewController <AVAudioPlayerDelegate> {     AVAudioPlayer *player

python中关于本地文件的API

Python中关于本地文件的API */--> Python中关于本地文件的API #TITLE: python中关于本地文件的API #KEYWORDS: Python,文件,路径 #DATE: Fri Jul 1 21:24:04 2016 在Python中,文件操作主要来自os模块,主要方法如下: 函数 描述 os.listdir(dirname) 列出dirname下的目录和文件 os.getcwd() 获得当前工作目录 os.curdir 返回当前目录('.') os.chdir(di

报表XML导出rtf格式,结果在浏览器中打开XML文件。用360浏览器下载rtf文件打开后出现Authentication failed 问题

报表XML导出rtf格式,结果在浏览器中打开XML文件.用360浏览器下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源事务处理 XML"请求,选择输出rtf格式,完成后查看输出,却在浏览器中打开了XML文件.        提示:需要检查一下是否有对应的模板文件和模板定义有效时间.        解决方案:1. 查看日志. 从中可以看出出错原因,以及模板代码.2. 添加Oracle XML Publi

[Perl系列—] 1. 清空目录及目录中的所有文件

Perl 删除单个文件和目录 Perl 删除单个文件的语法是: unlink 举例来说, 删除 D 盘 temp 目录下的 test.txt 的写法就是: unlink "D:/temp/test.txt" 如果要删除这个目录中所有的文件的话(不包含子目录) unlink glob "D:/temp/*" Perl 删除单个目录的语法是:  rm 类似, 删除上面的temp 目录的写法就可以是: rmdir "D:/temp" 看起来很简单, 但

删数据库副文件出错

在SQL Server 2008中,ndf文件,通过alter database remove file 文件逻辑名,删除此ndf文件,执行后出错. (消息 5042,级别 16,状态 1,第 2 行 无法删除 文件'Sname3',因为它不为空.) 此文件为空文件,无任何数据. 解决办法: use db_name go -- Empty the data file. DBCC SHRINKFILE (logic_name, EMPTYFILE); GO -- Remove the data f