C++ 如何仅为函数调用而非全局禁用SCL安全警告?
根据MSDN关于:C++ 如何仅为函数调用而非全局禁用SCL安全警告?,c++,visual-c++,C++,Visual C++,根据MSDN关于: 调用标准C++库中任何一个潜在的不安全方法将导致。要禁用此警告,请在代码中定义宏_SCL_SECURE_NO_警告: #define _SCL_SECURE_NO_WARNINGS 也可以禁用如下警告: #pragma warning(disable:4996) 但是。。。通过使用这些方法中的任何一种,您都可以禁用全局警告,我希望在本地执行此操作,例如: #pragma warning(disable:4996) some_string.copy(str, some_st
调用标准C++库中任何一个潜在的不安全方法将导致。要禁用此警告,请在代码中定义宏_SCL_SECURE_NO_警告:
#define _SCL_SECURE_NO_WARNINGS
也可以禁用如下警告:
#pragma warning(disable:4996)
但是。。。通过使用这些方法中的任何一种,您都可以禁用全局警告,我希望在本地执行此操作,例如:
#pragma warning(disable:4996)
some_string.copy(str, some_string.length());
// #pragma warning(enable:4996) There is something outhere like this?
这里有类似于上述代码的东西?使用以下语法:
#pragma warning( push ) // Stores the current warning state for every warning.
#pragma warning( pop ) // pops the last warning state pushed onto the
// stack. Any changes that you made to the warning
// state between push and pop are undone.
可以在本地修改和解析警告配置
因此,按照问题的示例,您可以禁用然后再次启用警告:
#pragma warning(push) // save the warning conf status.
#pragma warning(disable:4996) // disable specific warning.
// ... // you could disable more than one.
target.copy(str, target.length()); // call
#pragma warning(pop) // restore previous warning conf.
正如Charles Bailey在评论中指出的,您也可以使用:
#pragma warning(default: ...)
但您必须考虑到,如果警告的状态在默认情况下处于禁用状态,则不会将此类警告恢复为再次启用
对于Instance:设为默认禁用的警告
// At this point n was enabled.
#pragma warning(disable:n)
// ... some code here
#pragma warning(default:n)
// n remains disabled. Maybe not what you want.
参考资料:MMMM我想知道为什么会投反对票。与
#pragma warning(disable:…)
最接近的是#pragma warning(disable:…)
,尽管顾名思义,它实际上没有启用默认关闭的警告。@charlesbaily#pragma warning(default:…)
没有完全删除对警告状态的任何修改?对不起,我不明白你的问题。@CharlesBailey我的错,你是对的,谢谢。只是想知道,#undefine/code/#define
也能起作用吗?我想它会。。。让我try@Amadeus我试过你的想法,但我发现如果你不在任何代码行之前写#define(定义)SCL(安全)(无)警告(/code>),它就不起作用了(哇!!??)。所以,这并不能解决问题。谢谢你的帮助try@Amadeus我之前的结论不太正确,似乎有些include语句没有给出#define(定义)SCL(安全)NO(无)警告
一些方法。但我认为这是另一个问题。