环境

Visual Studio 2017

现象

头文件cJSON.h与源文件cJSON.c添加入工程后,编译出现如下C1853错误。

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

解决方法

1、在解决方案资源管理器中右击cJSON.c文件,选择属性。

2.在cJSON.c属性页,选择配置属性>C/C++>预编译头,配置改为“所有配置”,修改预编译头为“不适用预编译头”。

更改后出现

error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

诸如此类的问题

原因解释
这种微软的警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。库函数改写例子:
mkdir改写为 _mkdir 
fopen”改写为 fopen_s 
stricmp改写为 stricmp_s
sprintf改写为sprintf_s

strcpy改写为strcpy_s

方法一:调用VS2005鼓吹的那些带“_s”后缀的非标准函数,即在其后加上"_S",如sprintf改为sprintf_s    。
方法二:在文件最开始添加#define _CRT_SECURE_NO_DEPRECATE或#pragma warning(disable:4996)     ,这是忽略警告的方法(一般比较少用)。
方法三:干粹在工程属性中设置(推荐)。

在工程属性中设置的方法如下:

对于VC6:
打开Project----settings----Resources----Preprocessor definitions,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE这两个宏。

对于VS系列的版本:
打开项目----项目属性---配置属性----C/C++ ----预处理器----预处理定义,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE这两个宏。

诸如此类问题

MFC工程调用cJSON.c出现C1853错误的解决办法(老版本C文件加入新的C++项目)的更多相关文章

  1. Oracle的常见错误及解决办法

    ORA-12528: TNS:listener: all appropriate instances are blocking new connections ORA-12528问题是因为监听中的服务 ...

  2. Eclipse 报 "The builder launch configuration could not be found" 错误的解决办法

    http://blog.csdn.net/defonds/article/details/26340561 Eclipse 忽然报 "The builder launch configura ...

  3. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法

    在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...

  4. 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法

    [技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx’ remains ...

  5. WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法

    本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...

  6. TF31003错误的解决办法

    TF31003错误的解决办法   在今天上午机器重新启动后,VS2012突然无法连接TFS2010了.在机器重新启动之前还使用正常.刚开始以为TFS出现了问题,不过其他小组同事使用却正常,问题应该在我 ...

  7. 关于SSIS批量抽取Excel文件报0x80004005错误的解决办法

    原文:关于SSIS批量抽取Excel文件报0x80004005错误的解决办法 标题: Microsoft Visual Studio ------------------------------ Pa ...

  8. tensorflow_mnist数据集一直加载错误的解决办法

    tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...

  9. 使用Scala IDE for Eclipse遇到build errors错误的解决办法

    在编写第一个Scala语言的Spark程序时,在Scala IDE for Eclipse中运行程序时出现“Project XXXX contains build errors, Continue l ...

  10. 使用wubi安装ubuntu14.04出现的常见错误的解决办法

    花了一天的时间终于安装上了Ubuntu14.04,过程坎坷,是血泪史,开始报“cannot download the metalink and therefore the ISO”错误,解决后,又报“ ...

随机推荐

  1. nginx通过参数代理到其他站点

    http { include mime.types; default_type application/octet-stream; resolver 8.8.8.8; ##Nginx0.6.18以后的 ...

  2. 用python从网页下载单词库

    从网站下载单词库 1 每一页有几百个单词 2 每一个单词有独立的URL,URL中包含单词的中文解释 3 使用的库 requests,pyquery,web #coding:utf-8 import r ...

  3. Selenium私房菜系列4 -- Selenium IDE的使用【QQ】

    前面说过,Selenium IDE是Firefox的一个插件,是可以进行脚本录制以及案例转换,所以Selenium IDE+Firebug会成为你日后写测试案例的两大助手(IE下可以使用Seleniu ...

  4. exp1-Password engine-加密API实现与测试

    加密API实现与测试 181210 1.准备工作 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习. 2.实现GMT 0018-2012接口函数 实现GMT 0018-2012 ...

  5. ZIAO日报 202302

    2023.2 2023年2月14日 10:23 2023.2.14 继续读<Multi-View Transformer for 3D Visual Grounding>,读到了relat ...

  6. MTK平台总结

    1. 通过cmdline参数不对printk打印速率进行限制:mt_boot.c kcmdline_append(" ignore_loglevel=1 printk.devkmsg=on ...

  7. Qt-设置背景色

    https://blog.csdn.net/qq_43793182/article/details/121980724?ops_request_misc=&request_id=&bi ...

  8. 【python】读写文件

    1.打开文件与文件模式 1.1 文件模式 (1) 'r':读取模式(默认文件模式,显式指定读取模式的效果和不指定模式相同); (2) 'w':写入模式(如果写入时,文件不存在,会创建文件); 注1:其 ...

  9. BIP弹框内容显示的隐藏

    viewModel.on("customInit", function (data) {         // 关闭或取消关原因详情--页面初始化         viewMode ...

  10. firewalld 防火墙centos7

    在centos7中iptables已经废弃不用 firewalld命令: 查看所有规则 firewall-cmd  --list-all 用命令行 来 允许40ip 访问本机 firewall-cmd ...