gcc没有警告“变量集但未使用”

时间:2016-02-08 12:13:05

标签: c++ gcc gcc-warning unused-variables

我有这个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++;
}

我希望这两个错误:

  1. error: variable ‘unused’ set but not used [-Werror=unused-but-set-variable]
  2. error: ‘unused’ and ‘x’ are used uninitialized [-Werror=uninitialized]
  3. bar( unused );循环强制for上方添加gcc以显示有关使用未初始化变量的警告。

    为什么gcc 4.9.3 抱怨任何一个MCVE?

    编译命令:g++ -O3 -c -Wall -Wextra -Werror -std=c++11 foo.cpp

    使用-O1进行编译我收到forerror: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized]行的警告。所有其他优化级别都不会产生任何警告。

2 个答案:

答案 0 :(得分:2)

编译器不使用变量。只有在声明了局部变量(并最终初始化它)但从不在任何语句中使用此变量时,才会触发此警告。

因此,在您的示例中,变量unused被声明,初始化(在第一个示例中)并在第二个语句中使用(此处用于读取和写入)。变量x也被声明和使用(但未初始化)。

在第二个示例中,编译器应该为变量x显示“未初始化”警告。如果仅针对-O1显示此警告,则可能是编译器错误?

答案 1 :(得分:0)

这是一个5岁半的小虫。

See GCC Bugzilla – Bug 44677