默认情况下,在Visual Studio中从项目中删除安全警告(_CRT_SECURE_NO_WARNINGS)

Jua*_*nez 171 c++ visual-studio precompiler

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

我发现自己一再创建解决编程竞赛的新项目,并且真的很烦人(并且花费宝贵的时间)来添加:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
Run Code Online (Sandbox Code Playgroud)

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

use*_*100 268

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

按Alt-F7或右键单击解决方案资源管理器,然后选择"属性"

配置:所有配置

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

选择编辑...

将"_CRT_SECURE_NO_WARNINGS"复制到顶部的"预处理器定义"白色框中.

在此输入图像描述

  • 这描述了如何为一个我认为OP已经知道的项目添加它(尽管它不是100%清楚).关键问题是如何添加它以使其出现在所有项目中.理想情况下,如何将它添加到%(PreprocessorDefinitions)宏中,以便它包含在任何地方? (10认同)
  • 我没有“预处理器定义”选项卡。我能做些什么 ? (2认同)

Sha*_*314 80

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

#pragma warning(disable:4996)
Run Code Online (Sandbox Code Playgroud)

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

有点讨厌,但对我的一小部分代码来说是完美的,到目前为止最简单.

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

  • 我尝试了这个页面上显示的#define的每个变体(有和没有结尾的1),只有#pragma为我工作.(VS2013社区版)我确定我错过了一些东西,但在某些时候,你只需要它就可以工作,这样你就可以继续使用它. (4认同)
  • 我可以确认_CRT_SECURE_NO_WARNINGS在VC++ 2015中无法正常工作.谢谢! (2认同)

Cap*_*ous 28

不是自动的,没有.你可以创建一个项目模板作为BlueWandered建议创建,您可以使用您当前和将来的所有项目中的自定义属性表.

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

现在,只要您创建新项目,就像这样添加此属性表...

  1. 打开物业经理(查看 - >物业经理)
  2. 在物业经理中右键单击您的项目,然后选择"添加现有项目物业表"

这样做的好处是,您不仅可以在一个地方管理常用设置,而且只要您更改设置,它们就会传播到使用它的所有项目.如果您_CRT_SECURE_NO_WARNINGS想要在项目中使用很多像Boost这样的设置,那么这很方便.


小智 20

这里的所有解决方案都无法在我的VS2013上运行,但是我#define _CRT_SECURE_NO_WARNINGS在stdafx.h之前放置了#pragma once所有警告并且所有警告都被禁止了.注意:我只编写用于支持我的研究的原型设计代码,因此请确保在编写代码时理解此方法的含义.

希望这可以帮助

  • 对于那些不知道的人,应该将其定义为 1,如下所示:#define _CRT_SECURE_NO_WARNINGS 1 (2认同)

ing*_*nti 10

我对VS 2017的两分钱:

我可以在这些样式中确认它在stdafx.h中有效:

一个)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
Run Code Online (Sandbox Code Playgroud)

b)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once
Run Code Online (Sandbox Code Playgroud)

(我已为MSDN网络调用添加了另一个定义..)当然我更喜欢a).

我可以确认:#define _CRT_SECURE_NO_WARNINGS(没有值)工作.

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


小智 10

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