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 ) )
如何正确执行表达式as0
所说的话与口译员有关。示例:
<> 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)