在 C# 项目(.csproj
个文件(中,可以将除一组特定警告之外的所有警告视为错误。通常,这对于过时/已弃用的警告是有意义的,因为这些警告专门用于在宣布即将进行的 API 更改时不会破坏构建。
对于 C++/CLI 项目,即在.vcxproj
文件中,是否也可以以某种方式做到这一点?
(我指的是将 C4947 视为警告,尽管所有其他警告都被视为错误。
2017 年的答案表明,Microsoft编译器通过编译器开关编译的纯C++项目是不可能的。但是,我希望.vcxproj
Xml 格式能够支持导致这种行为的某些元素。
我尝试将.csproj
文件中的<WarningsNotAsErrors>4947</WarningsNotAsErrors>
元素插入到.vcxproj
文件中,但这无济于事。另外,看到.csproj
文件中的<TreatWarningsAsErrors>
在.vcxproj
中被称为<TreatWarningAsError>
(即单数而不是复数(,我尝试了<WarningNotAsError>4947</WarningNotAsError>
,但无济于事。
我已经阅读了一些关于仅将特定警告视为错误的提示,但这当然不是一个可行的解决方案。有数百甚至数千条警告(在未来的编译器版本中可能更多(,所有这些我都想视为错误,除了一个。
我们还没有一个完整而完美的答案。这似乎是我们能做的最好的事情。
也一直想这样做,尽管更普遍的是C++。
主要用于弃用函数,就像这篇文章一样,它有几个建议的解决方法。
https://social.msdn.microsoft.com/forums/vstudio/en-US/88ffa3e4-1ad4-410a-b50b-d6575cb914bd/override-wx-behavior-using-pragma-warning
不确定它是否适合您的情况。
这是我能找到的最好的在使用已弃用的函数时发出消息的方法,如果双击该消息会将您带到该位置。 不过,就编译器而言,这仍然不是一个警告。
int my_function(int an_arg);
#define STRINGIFY_X(x) #x
#define STRINGIFY(x) STRINGIFY_X(x)
#define DepFunc(Func) __pragma(message( __FILE__ "(" STRINGIFY(__LINE__) "): warning C4996: '" STRINGIFY(Func) "': My message about deprecated function." )) Func
#define my_function DepFunc(my_function)
// Can push and undefine so we don't get the message when we define the function
#pragma push_macro("my_function")
#undef my_function
int my_function(int an_arg)
{
return an_arg + 2;
}
#pragma pop_macro("my_function")
int some_situation()
{
// use it somewhere
return my_function(1); // line 50
}
使用使用它的行获取这样的消息。
C: ..myFile.cpp(50): warning C4996: 'my_function': My message about deprecated function.