gpt4 book ai didi

c++ - 为什么我在写 = 而不是 == 时没有收到警告?

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:23 26 4
gpt4 key购买 nike

经过几个小时的努力,最终确定了由于此无效语句导致的错误:

...
assert( variable = -0.5 );

这显然应该是 assert( variable == -0.5 );:开发者打字错误。

我正在使用 Visual Studio 2015 进行编译,并且真正致力于实现“0 警告编译”。

如此糟糕和危险的语句怎么会在编译器不报告警告的情况下进行编译?是否没有我们可以启用的编译器选项来避免这种情况?

编辑:即使 bool b = ( variable = -0.5 ) 也不会产生任何编译器警告

最佳答案

只有在使用 /W4 编译级别时才会警告条件表达式中的赋值,请参阅 see this .

所以我使用在线 MSVC 编译器(我在这台电脑上没有 VS 2015)对此代码进行了测试:

//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x86

#include <iostream>
#include <cassert>
int main(){
int a;
if (a = 2){
std::cout << "Hello, world!\n";
}
assert(a = 3);
}

此命令行:source_file.cpp -o a.exe/EHsc/MD/W4/I C:\boost_1_60_0/link/LIBPATH:C:\boost_1_60_0\stage\lib 和这两行警告:

Warning(s):
source_file.cpp(9) : warning C4706: assignment within conditional expression
source_file.cpp(12) : warning C4706: assignment within conditional expression

显然,QT header qglobal.h 在某些配置下使用 QT_WARNING_DISABLE_MSVC(4706) 禁用此警告。

关于c++ - 为什么我在写 = 而不是 == 时没有收到警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com