在我看来,VS2017无法捕获一些相当明显的编译器警告,旧版本没有。这对我来说似乎是如此根本,我猜测有的问题是我缺少的东西(例如一些新的默认编译器设置,也许?)。有没有人见过这个?
为了测试这一点,我在2013年和2017年创建了一个简单的控制台应用程序。我对项目设置进行的唯一更改是将编译器警告级别设置为4并将警告报告为错误。以下是整个来源
在VS2013中失败了。在2017年,它建立得很好......
// TestWarning4127.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
int main()
{
if (true) // *** SHOULD generate warning 4127
std::cout << "Warning";
return 0;
}
我错过了一些明显的东西......?
答案 0 :(得分:7)
在if
或while
条件中使用时,1
或true
等微不足道的常量不会在VS 2017中生成警告,如{{3}中所述官方文件。摘自官方文件:
if语句或while循环的控制表达式求值 一个常数。由于他们共同的习惯用法,琐碎 除非它们,否则诸如1或true之类的常量不会触发警告 是表达式中的操作的结果。
据说这不是VS 2013中的警告,默认警告级别为 W3 。只有提升 W4 设置,VS 2013才会报告警告。它在VS 2017中被完全删除了。
为了进行比较,GCC不会产生警告: Compiler Warning (level4)