【问题标题】:Why do I get an "Unreferenced Local Variable" warning? (C++)为什么我会收到“未引用的局部变量”警告? (C++)
【发布时间】:2009-05-21 20:40:47
【问题描述】:

当我做类似的事情时

#include<iostream>
int main()
{
    int x;
    return 0;
}

我收到关于 x 是未引用的局部变量的警告(我假设是因为我创建了一个变量,然后没有使用它),但为什么这会给我一个警告?

【问题讨论】:

    标签: c++ variables initialization


    【解决方案1】:

    因为通常人们不会故意创建未引用的变量。因此,如果程序中存在未引用的变量,通常表明您在某处存在错误,编译器会警告您。

    【讨论】:

    • ...或者你在某处有一个#ifdef。最后,这几乎是一回事。 :)
    【解决方案2】:

    可能是因为你白白浪费内存。

    此外,代码变得肮脏且难以理解,更不用说程序员通常不会定义他们不需要的变量,所以它有点像“这真的是你的意思吗?”警告。

    【讨论】:

    • 智能编译器不会为其分配内存。捕捉错误/错别字可能更多。
    • 我认为任何合理的优化器都不会为未使用的变量创建空间。
    【解决方案3】:

    可能是这样停止的:

    void some_func() {
        int a, b, c, d, e;
        ...
        do_something_with(a);
        do_something_with(b);
        do_something_with(c);
        do_something_with(d);
        do_something_with(c); // after hours of reading code, e looks like c: BUG!!
    }
    

    【讨论】:

      【解决方案4】:

      顺便说一句,我在开发代码时偷偷地把未使用的变量作为一种快速且肮脏的 TODO 机制...

      bool doSomething(...)
      {
          int dontForgetToReplaceStubWithSomethingReal;
          return false;
      }
      

      【讨论】:

      • 这就是 TODO cmets 的用途。
      • 不需要燃烧,我喜欢这样并且自己做了,虽然我倾向于不签入。我用它们来提醒在签入前回到某些事情,我通常有 TODO名称,因此它们出现在 TODO 搜索中。您需要确保它们不会逗留太久或数量过多,否则您最终会一团糟。
      • 真正的程序员使用 -Werror 编译 ;-)(在 gcc 3ish 上使用容器容器时除外:标准库中的愚蠢警告......)。不过,说真的,我不喜欢依赖警告的原因是您在第一次编译文件时只会看到它们一次。然后,如果您不更改它,则在您签入并且它们出现在构建日志中之前,您将永远不会再看到它们。哎呀。
      • 我有点喜欢这个,因为“被遗忘的存根”类似于“被遗忘的变量”。
      【解决方案5】:

      它还让您知道,如果您认为您正在使用一个变量而不是您会发现。假设您创建变量是有原因的,也许您忘记在某处使用它。

      【讨论】:

        【解决方案6】:

        或者,也许他们希望它的构造函数在作用域内产生副作用,而它的析构函数在作用域外产生另一个副作用,并且不希望编译器对人们最了解的东西如此“有帮助”符合其他人代码的意图。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-20
          • 1970-01-01
          • 1970-01-01
          • 2013-01-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多