224

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

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

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

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

4

7 回答 7

314

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

按 Alt-F7 或右键单击解决方案资源管理器并选择“属性”

配置:所有配置

单击预处理器定义行以调用其编辑器

选择编辑...

将“_CRT_SECURE_NO_WARNINGS”复制到顶部的预处理器定义白框中。

在此处输入图像描述

于 2013-12-24T01:04:54.057 回答
114

这可能是因为我还是 VS 的新手,而且对 C 来说绝对是新手,但唯一能让我构建的东西是添加

#pragma warning(disable:4996)

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

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

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

于 2015-09-15T01:57:29.310 回答
31

不是自动的,没有。您可以按照BlueWandered的建议创建项目模板,创建可用于当前和所有未来项目的自定义属性表。

  1. 打开物业管理器(查看->物业管理器)
  2. 在属性管理器中右键单击您的项目并选择“添加新项目属性表”
  3. 给它一个名字并在一个公共目录中创建它。属性表将添加到所有构建目标。
  4. 右键单击新的属性表并选择“属性”。这将打开属性并允许您更改设置,就像您为项目编辑它们一样。
  5. 进入“通用属性->C/C++->预处理器”
  6. 编辑设置“预处理器定义”并添加_CRT_SECURE_NO_WARNINGS.
  7. 保存,你就完成了。

现在,每当您创建一个新项目时,请像这样添加此属性表...

  1. 打开物业管理器(查看->物业管理器)
  2. 在属性管理器中右键单击您的项目并选择“添加现有项目属性表”

这样做的好处是,您不仅可以在一个地方管理常用设置,而且可以随时更改设置,它们会传播到使用它的所有项目。如果您想在项目中使用很多设置(例如 Boost)_CRT_SECURE_NO_WARNINGS或库(例如 Boost),这将非常方便。

于 2013-06-02T17:20:44.017 回答
19

这里的所有解决方案都无法在我的 VS2013 上运行,但是我#define _CRT_SECURE_NO_WARNINGS在 stdafx.h 之前将其放入,#pragma once并且所有警告都被抑制了。注意:我仅出于原型设计目的而编写代码以支持我的研究,因此请确保您在编写代码时了解此方法的含义。

希望这可以帮助

于 2014-10-25T15:19:17.920 回答
11

只需复制“ _CRT_SECURE_NO_WARNINGS ”将其粘贴到项目->属性->c/c++->预处理器->预处理器定义 单击确定。它会工作

于 2019-07-05T08:19:01.110 回答
10

VS 2017 我的两分钱:

我可以确认它在 stdafx.h 中以以下两种样式工作:

一个)

#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(没有值)不起作用

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

于 2017-09-07T09:03:50.490 回答
-1

如果您的项目不使用 stdafx.h,则可以将以下行作为 .cpp 文件中的第一行,编译器警告应该会消失——至少在 Visual Studio C++ 2008 中对我来说是这样。

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

在它们之前有注释和空行是可以的。

于 2019-01-02T22:45:03.250 回答