是否有一种方法可以在默认情况下为所有项目设置删除使用scanf()等函数时出现的预编译器安全警告。我发现可以通过在项目选项中添加一行或在代码开头添加#define _CRT_SECURE_NO_WARNINGS来实现。
我发现自己为了解决编程竞赛而反复创建新项目,添加以下内容真的很烦人(而且花费了宝贵的时间):
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
在代码的开头,或者每次我启动一个新项目时在预编译器选项中设置它。
是否有一种方法可以在默认情况下为所有项目设置删除使用scanf()等函数时出现的预编译器安全警告。我发现可以通过在项目选项中添加一行或在代码开头添加#define _CRT_SECURE_NO_WARNINGS来实现。
我发现自己为了解决编程竞赛而反复创建新项目,添加以下内容真的很烦人(而且花费了宝贵的时间):
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
在代码的开头,或者每次我启动一个新项目时在预编译器选项中设置它。
不是自动的,不是。您可以根据bluewander的建议创建一个项目模板,也可以创建一个自定义属性表,用于当前和所有未来的项目。
Open up the Property Manager (View->Property Manager) In the Property Manager Right click on your project and select "Add New Project Property Sheet" Give it a name and create it in a common directory. The property sheet will be added to all build targets. Right click on the new property sheet and select "Properties". This will open up the properties and allow you to change the settings just like you would if you were editing them for a project. Go into "Common Properties->C/C++->Preprocessor" Edit the setting "Preprocessor Definitions" and add _CRT_SECURE_NO_WARNINGS. Save and you're done.
现在,每当你创建一个新项目时,像这样添加这个属性表…
打开物业管理器(视图->物业管理器) 在属性管理器中右键单击项目,选择“添加现有项目属性表”
这样做的好处是,您不仅获得了一个单独的地方来管理公共设置,而且每当您更改设置时,它们都会传播到使用它的所有项目。如果你有很多像_CRT_SECURE_NO_WARNINGS这样的设置,或者像Boost这样的库,你想在你的项目中使用,这是很方便的。
在解决方案资源管理器中标记所需的所有项目。
按Alt-F7或在解决方案资源管理器中右键单击,选择“属性” 配置:所有配置 单击Preprocessor Definitions行以调用其编辑器 选择编辑 将_CRT_SECURE_NO_WARNINGS复制到顶部的预处理器定义白框中
这里所有的解决方案都不能在我的VS2013上工作,然而,我把#define _CRT_SECURE_NO_WARNINGS放在stdafx.h中,就在#pragma之前,所有的警告都被抑制了。
注意:我只是为了支持我的研究而编写原型代码,所以请确保在编写代码时理解这种方法的含义。
这可能是因为我对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之前
如果你的项目不使用stdafx.h,你可以把下面的行作为你的.cpp文件的第一行,编译器的警告应该会消失——至少在Visual Studio c++ 2008中对我来说是这样的。
#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1
在它们之前有注释和空行是可以的。