C++ 为什么会出现“警告C4804:'&燃气轮机';:不安全地使用'型;布尔';正在运行中的Visual Studio 2015是否正在弹出? 为什么Visual Studio 2015上突然出现警告C4804:“>”:在操作中不安全地使用类型“bool”?

C++ 为什么会出现“警告C4804:'&燃气轮机';:不安全地使用'型;布尔';正在运行中的Visual Studio 2015是否正在弹出? 为什么Visual Studio 2015上突然出现警告C4804:“>”:在操作中不安全地使用类型“bool”?,c++,visual-studio-2015,cl,C++,Visual Studio 2015,Cl,如果运行此代码: #include <iostream> #include <cstdlib> int main( int argumentsCount, char* argumentsStringList[] ) { #define COMPUTE_DEBUGGING_LEVEL_DEBUG 0 #define COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE 32 int inputLevelSize; int bui

如果运行此代码:

#include <iostream>
#include <cstdlib>

int main( int argumentsCount, char* argumentsStringList[] )
{
#define COMPUTE_DEBUGGING_LEVEL_DEBUG      0
#define COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE 32

    int inputLevelSize;
    int builtInLevelSize;

    inputLevelSize   = strlen( "a1" );
    builtInLevelSize = strlen( "a1 a2" );

    if( ( 2 > inputLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE )
        || ( 2 > builtInLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE ) )
    {
        std::cout << "ERROR while processing the DEBUG LEVEL: " << "a1" << std::endl;
        exit( EXIT_FAILURE );
    }
}
其中
cl_env.bat
为:

@echo off

:: Path to your Visual Studio folder.
::
:: Examples:
::     C:\Program Files\Microsoft Visual Studio 9.0
::     F:\VisualStudio2015
set VISUAL_STUDIO_FOLDER=F:\VisualStudio2015

:: Load compilation environment
call "%VISUAL_STUDIO_FOLDER%\VC\vcvarsall.bat"

:: Invoke compiler with any options passed to this batch file
"%VISUAL_STUDIO_FOLDER%\VC\bin\cl.exe" %*
有问题的线路不是布尔线:

    if( ( 2 > inputLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE )
        || ( 2 > builtInLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE ) )
如何正确执行表达式as
0

所说的话与口译员有关。示例:

<> LI> < P>当C++标准规定编译器必须理解<代码> 0 < x 10 < /> >作为<代码>(0<x)&(x<10)< />代码,但编译器实际上是理解它为<代码>(0 < x)< 10 < /代码>,我们称之为编译器错误。p>
  • 因此,当用户声明编译器必须将
    0
    理解为
    (0
    ,但编译器实际上将其理解为
    (0
    ,我们称之为用户bug


  • a>b>c
    这样的条件并不像你想象的那样有效。事实上,它们的工作原理类似于
    (a>b)>c
    (因为
    操作符从左到右工作),但是
    a>b
    的结果是布尔值,因此警告

    正确的方法是使用
    和&
    (逻辑
    ):


    写入范围检查表达式的正确方法是:

    (0


    如前所述,该行的计算结果为
    ((0

    如果您像
    0
    那样进行比较,它首先计算
    0
    ,该值为真或假,然后将其与10进行比较。您需要将
    0

    这样的表达式分开,您的意思是,
    @addons\u zz,是的,尽管有人可能认为括号可能会增加(或减少)代码可读性。但是是的,它们不是强制性的。@MSalters,你是对的,我只是认为括号提高了这些条件的可读性,但我完全理解你可能认为它们实际上降低了可读性。尽管如此,我还是会编辑答案。
    
        if( ( 2 > inputLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE )
            || ( 2 > builtInLevelSize > COMPUTE_DEBUGGING_DEBUG_INPUT_SIZE ) )
    
    if(a > b && b > c)