jpo*_*o38 0 c++ visual-c++ visual-studio-2015
在几个小时内挣扎,最终确定由于此无效声明而导致的错误:
...
assert( variable = -0.5 );
这显然应该是assert( variable == -0.5 );:开发者错字.
我正在使用Visual Studio 2015进行编译,并且确实在进行"0警告编译".
怎么可能编译这样一个糟糕而危险的语句而编译器没有报告任何警告?是否没有编译器选项我们可以启用以避免这种情况?
编辑:甚至bool b = ( variable = -0.5 )不会产生任何编译器警告
如果您使用的是/W4编译级别,则仅警告条件表达式中的分配,请参阅此处.
所以我在这段代码上使用在线MSVC编译器(我在这台PC上没有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标头在某些配置下qglobal.h禁用此警告QT_WARNING_DISABLE_MSVC(4706).
| 归档时间: | 
 | 
| 查看次数: | 213 次 | 
| 最近记录: |