VS2017中未生成警告

时间:2018-01-30 18:00:33

标签: c++ visual-studio visual-studio-2013 visual-studio-2017

在我看来,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;
}

我错过了一些明显的东西......?

1 个答案:

答案 0 :(得分:7)

ifwhile条件中使用时,1true等微不足道的常量不会在VS 2017中生成警告,如{{3}中所述官方文件。摘自官方文件:

  

if语句或while循环的控制表达式求值   一个常数。由于他们共同的习惯用法,琐碎   除非它们,否则诸如1或true之类的常量不会触发警告   是表达式中的操作的结果。

据说这不是VS 2013中的警告,默认警告级别为 W3 。只有提升 W4 设置,VS 2013才会报告警告。它在VS 2017中被完全删除了。

为了进行比较,GCC不会产生警告: Compiler Warning (level4)