我可以把特定的警告当作错误来处理吗?

24

以下是我有时会在学生代码中看到的模式的简化版本:

bool foobar(int a, int b)
{
    if (a < b) return true;
}

实际代码当然更加复杂。Visual Studio 报告了一个警告 C4715 (not all control paths return a value),我想将所有 C4715 警告都视为错误。这是否可能?


4
你应该将所有的警告都视为错误处理。 :) - GManNickG
1
@GMan:虽然在一般情况下我同意。但有时需要能够具体说明事情。 - Martin York
@GManNickG - 我最近为我的一个项目打开了-Werror,并意识到它有一个缺点,就是在我开发代码时,将错误或警告分类是很有帮助的。我可以看到“啊哈,2个警告和1个错误”,并开始更好地预测我可能做错了什么,而不是只看到“3个错误”。实际上,-Werror似乎只有在这是唯一的消除代码中警告的方法时才是必要的。 - orion elenzil
4个回答

44

“pragma” 需要在所有文件中才算有效,还是在项目中的任何一个文件中都可以? - TankorSmash
2
文档:[/w,/Wn,/WX,/Wall,/wln,/wdn,/wen,/won(警告级别)](https://msdn.microsoft.com/en-us/library/thxezb7y.aspx) - Tom Sirgedas
@TomSirgedas 谢谢您提供的文档链接。 - Eugen Constantin Dinca

6

/we4715 对我有效。

在Visual Studio 2013中,UI界面在项目设置 -> 配置属性 -> C/C++ -> *高级 *-> 将特定警告视为错误 中添加 "4715"。

文档:http://msdn.microsoft.com/en-us/library/thxezb7y.aspx

(请注意,该页面列出了VS2013的错误UI属性。)


2

我将以下内容添加到(VB)项目文件中,然后它就能正常工作:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">  
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,41997</WarningsAsErrors>
</PropertyGroup>

0

将编译器警告级别设置为4级(在Visual Studio中),它将把所有警告视为错误。无论如何,让学生以没有警告和错误的方式编译代码是一个好习惯 :)

此外,打开/WX编译器选项。


4
不会的,除非你告诉它。将两者都设置是一个好习惯,但仅将其设置为级别4不足以使其在警告时出现错误。 - Edward Strange
我忘了提到/WX选项。已编辑以修复。 - Zac Howland
@Zac:另一方面,在第4级别上,VS确实会为许多不是错误的事情而大声呼喊。我更喜欢将级别3和/WX结合在一起。 - Matthieu M.
2
@Matthieu:/W4没问题,但/Wall很烦人,会对系统头文件中的内容发出警告。 - Steve M
1
@Matthieu:它只会在你创建4级警告时对你尖叫。我避免使用/Wall,因为我无法修复Microsoft标准库的实现,但它仍会对你尖叫。 - Zac Howland
@Zac:我以为它也会在STL头文件中发出问题信号...可能是我把它和/Wall混淆了 :) - Matthieu M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接