我应该担心未使用的变量吗?

Abh*_*hek 12 language-agnostic

我在C++的大型代码库中工作,总共大约800万行代码.在我的应用程序中,我看到了数千个未使用的变量,这些变量由g ++报告但被我的团队忽略.我想主动清理这些变量,但在处理这个问题之前我需要一些信息.

拥有数千个未使用的变量会有任何问题或缺点吗?

默认情况下,编译器将此视为忽略警告,但我认为我们应将警告视为错误.如果我们忽略此警告,是否会发生任何灾难?

我们应该努力纠正这个问题还是只是浪费精力?

小智 18

假设您的变量是POD类型,如整数,浮点数等,它们不太可能对性能产生影响.但它们对代码质量有很大影响.我建议您在更新代码时添加新功能,然后随意删除未使用的变量.您必须使用版本控制软件才能安全地执行此操作.

这是一个并不罕见的问题.作为一名顾问,我曾经审查了一个包含数百个未使用变量的大型FORTRAN代码库.当我问那些写作的团队为什么他们在那里时,他们的回答是"好吧,我们将来可能会需要它们......"

  • 当然,代码质量是解决这个问题的主要原因。出现如此多的警告往往会导致人们错过其他更重要的警告。他们在噪音中迷失了方向。如果您无法修复它们,并且您的编译器允许关闭各个警告,则应该将其关闭。如果做不到这一点,找到一种方法将它们过滤掉,这样您就不会错过关键的“变量可能在分配之前被使用”警告,这将在以后节省您数小时的调试时间。 (2认同)

rid*_*rid 4

如果您在优化的情况下进行编译,编译器很可能会简单地删除变量,就像它们不存在一样。如果您不使用优化,那么您的程序将占用变量的额外存储空间而不使用它。

最好不要声明变量然后使用它们,因为它们可能会占用空间,更重要的是,它们会使代码变得混乱,使其可读性降低。

比如说,如果您有 1000 个未使用的整数,并且您的平台上的整数长度为 32 位,那么在关闭优化的情况下,您总共将使用 4K 的额外堆栈空间。

如果未使用的变量不是参数,那么应该没有什么可以阻止您删除它们,因为没有任何东西可以破坏。您将获得可读性,并且能够看到编译器可能产生的其他更严重的警告。