为什么此变量标记为"未使用"?

时间:2018-05-09 19:16:35

标签: c++ gcc clang

我的C ++编译器会发出以下警告:#int; intVar'变量是"未使用"。

void MyClass::MyMethod(bool bFlag)
{
    int intVar = 10;
    if (bFlag)
        intVar = 20;
}

为什么编译器会在变量显然被使用时执行此操作?这是否应该修复编译器以识别实际上"使用"?

3 个答案:

答案 0 :(得分:5)

您有代码写入变量,但您没有任何代码从中读取。在这个意义上没有使用变量。

如果删除引用变量的行,则执行函数的可观察行为不会改变。这清楚地表明该变量未被使用。

答案 1 :(得分:4)

在此上下文中“使用”表示读取变量。如果您反复写入变量并且从不读取它,那么您写入变量的内容并不重要。这通常表明你忘记做任何你想做的事情,或者可以消除变量。在您的示例中,您从未阅读intVar。将intVar = 20;更改为(void)intVar;以“读取”该值并丢弃结果。你会发现警告消失了。

示范:https://godbolt.org/g/L3rFqM

答案 2 :(得分:2)

仅仅因为你指定它并没有使它"使用" - 当前编写函数时,优化编译器将删除赋值,因为它没有可观察到的副作用,这使得变量未被使用。