是否有一种方法可以在默认情况下为所有项目设置删除使用scanf()等函数时出现的预编译器安全警告。我发现可以通过在项目选项中添加一行或在代码开头添加#define _CRT_SECURE_NO_WARNINGS来实现。

我发现自己为了解决编程竞赛而反复创建新项目,添加以下内容真的很烦人(而且花费了宝贵的时间):

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

在代码的开头,或者每次我启动一个新项目时在预编译器选项中设置它。


当前回答

这里所有的解决方案都不能在我的VS2013上工作,然而,我把#define _CRT_SECURE_NO_WARNINGS放在stdafx.h中,就在#pragma之前,所有的警告都被抑制了。

注意:我只是为了支持我的研究而编写原型代码,所以请确保在编写代码时理解这种方法的含义。

其他回答

在解决方案资源管理器中标记所需的所有项目。

按Alt-F7或在解决方案资源管理器中右键单击,选择“属性” 配置:所有配置 单击Preprocessor Definitions行以调用其编辑器 选择编辑 将_CRT_SECURE_NO_WARNINGS复制到顶部的预处理器定义白框中

这可能是因为我对VS还是新手,对C也是新手,但唯一允许我构建的是添加

#pragma warning(disable:4996)

在我的文件的顶部,这抑制了我用sprintf得到的C4996错误

这有点烦人,但非常适合我的一小段代码,而且是迄今为止最简单的。

我在这里读到:https://msdn.microsoft.com/en-us/library/2c8f766e.aspx

VS 2017:

我可以确认它在stdafx.h中工作,这两种风格:

a)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

b)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(我已经为MSDN网络呼叫添加了另一个定义… 当然,我更喜欢a)。

我可以确认:

#define _CRT_SECURE_NO_WARNINGS

(没有值)不工作。

真正的要点是将这些定义放在函数声明之前,即在*.h之前

这里所有的解决方案都不能在我的VS2013上工作,然而,我把#define _CRT_SECURE_NO_WARNINGS放在stdafx.h中,就在#pragma之前,所有的警告都被抑制了。

注意:我只是为了支持我的研究而编写原型代码,所以请确保在编写代码时理解这种方法的含义。

复制_CRT_SECURE_NO_WARNINGS 粘贴到项目->属性->c/c++->预处理器->预处理器定义 单击OK

会有用的