我有这个 MCVE 编译没有任何警告:
auto foo() -> void
{
int unused = 0;
unused++;
}
对我来说,我会期待error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
。
这个 MCVE 编译也没有任何警告:
auto foo() -> void
{
int x;
int unused;
for ( ; x < 100; x++ ) unused++;
}
在这里,我期望这两个错误:
error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
.error: ‘unused’ and ‘x’ are used uninitialized [-Werror=uninitialized]
在循环bar( unused );
上方添加强制显示有关使用未初始化变量的警告。for
gcc
为什么在两个 MCVE 中都gcc 4.9.3
没有抱怨?
编译命令:g++ -O3 -c -Wall -Wextra -Werror -std=c++11 foo.cpp
编译它-O1
我得到这个警告与for
: error: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized]
。所有其他优化级别不会产生任何警告。