有没有办法告诉 Visual Studio 将警告视为警告,而不是错误?
Is there a way to tell Visual Studio to treat a warning as a warning, not an error?
在 Visual Studio 中,warning C4996(使用已弃用的函数)被视为错误,使用已弃用函数的代码根本无法编译。
有多种方法可以完全禁用 C4996,可以针对单行、翻译单元或整个项目抑制它。但是,如果我希望它仍然发出警告,但允许编译而不将其视为错误怎么办?
#include <iostream>
[[deprecated]]
void deprecated_function()
{
std::cout << "I function, but have been deprecated.\n";
}
int main() {
deprecated_function();
}
这根本无法编译。
#include <iostream>
[[deprecated]]
void deprecated_function()
{
std::cout << "I function, but have been deprecated.\n";
}
int main() {
#pragma warning(suppress: 4996)
deprecated_function();
}
这可以编译,但根本不会发出警告。
是否可以告诉 Visual Studio 发出警告,但仍允许编译,以用于已弃用的函数?我正在考虑重构目的,我想将一个函数标记为已弃用,确定所有使用它的地方,但代码仍然在每个中间阶段编译,其中一些但不是所有已弃用函数的使用已被替换。
我正在使用 Visual Studio 2019 Community 16.8.4 进行编译,警告级别设置为 /W3,“将警告视为错误”设置为“否”。如果发出此特定警告,则似乎将其视为错误。
找到了可行的解决方案。事实证明,相关标志实际上是“SDL checks”,而不是“将警告视为错误”。将其从 /sdl
翻转为 /sdl-
会导致编译在仍在编译时发出警告。
编辑:如果我想保留所有 SDL 检查 除了 将警告 C4996 视为错误,我可以将标志 /sdl
与标志结合使用/w34996
,指定 4996
被视为 3 级警告而不是错误。
在 Visual Studio 中,warning C4996(使用已弃用的函数)被视为错误,使用已弃用函数的代码根本无法编译。
有多种方法可以完全禁用 C4996,可以针对单行、翻译单元或整个项目抑制它。但是,如果我希望它仍然发出警告,但允许编译而不将其视为错误怎么办?
#include <iostream>
[[deprecated]]
void deprecated_function()
{
std::cout << "I function, but have been deprecated.\n";
}
int main() {
deprecated_function();
}
这根本无法编译。
#include <iostream>
[[deprecated]]
void deprecated_function()
{
std::cout << "I function, but have been deprecated.\n";
}
int main() {
#pragma warning(suppress: 4996)
deprecated_function();
}
这可以编译,但根本不会发出警告。
是否可以告诉 Visual Studio 发出警告,但仍允许编译,以用于已弃用的函数?我正在考虑重构目的,我想将一个函数标记为已弃用,确定所有使用它的地方,但代码仍然在每个中间阶段编译,其中一些但不是所有已弃用函数的使用已被替换。
我正在使用 Visual Studio 2019 Community 16.8.4 进行编译,警告级别设置为 /W3,“将警告视为错误”设置为“否”。如果发出此特定警告,则似乎将其视为错误。
找到了可行的解决方案。事实证明,相关标志实际上是“SDL checks”,而不是“将警告视为错误”。将其从 /sdl
翻转为 /sdl-
会导致编译在仍在编译时发出警告。
编辑:如果我想保留所有 SDL 检查 除了 将警告 C4996 视为错误,我可以将标志 /sdl
与标志结合使用/w34996
,指定 4996
被视为 3 级警告而不是错误。