2011-05-22 63 views
9

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

有没有成千上万的未使用变量的问题或缺点?

编译器默认将此视为一个被忽略的警告,但我相信我们应该将警告视为错误。如果我们忽略此警告,是否会发生灾难?

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

+2

1.这是不是一个真正的C++具体的问题。其他语言也可以有未使用的变量。 2.提示:StackOverflow不是论坛。你不需要问“有人知道的答案” - 直接询问。如果有人知道答案,他们会回答。 ;)+1 – 2011-05-22 16:18:15

回答

3

如果在优化时编译,编译器很可能会简单地删除这些变量,就好像它们不在那里一样。如果你不使用优化,那么你的程序将为变量占用额外的额外存储空间而不使用它。

这是很好的做法,不声明变量,然后不使用它们,因为它们可能会占用空间,更重要的是,他们弄乱你的代码,使得它的可读性。

如果你有,比如说,1000个未使用的整数,和你的平台上的整数为32位长,那么你会,总共使用了额外的堆栈空间4K,与优化关闭。

如果未使用的变量不是参数,那么就应该从没有消除他们阻止你,因为没有什么,你可能会断裂。您将获得可读性,并且您将能够看到编译器可能生成的其他更严重的警告。

+1

没错,但是一般来说,你只能编译时没有优化调试版本,而调试版本的大小通常会膨胀(调试符号等)。 – 2011-05-22 15:53:41

+0

1000个未使用的整数无论你做什么都没有什么区别......即使你编译了一个有限的存储器设备,除非内存非常有限,并且你不用任何理由使用优化,几KB或内存将不会有所作为。一般来说,最大的区别是代码的可读性和质量。 – rid 2011-05-22 15:57:13

-1

未使用的变量仍分配在内存中。删除它们将释放内存。

+5

如果优化已启用,则可能不是这种情况。 – 2011-05-22 15:48:19

+0

不知道为什么这是downvoted而不是其他人。 – zsalzbank 2011-05-22 15:50:04

+0

因为其他答案没有提出相同的说法? – 2011-05-22 15:58:15

17

假设你的变量是POD类型,如int,float等,它们不可能对性能产生影响。但是它们对代码质量有巨大的影响。我建议您在更新代码以添加新功能时,随时删除未使用的变量。您必须使用版本控制软件才能安全地执行此操作。

这是一个并不罕见的问题。作为一名顾问,我曾经审查过一个包含数百个未使用变量的大型FORTRAN代码库。当我问到是谁写的,为什么他们在那里的球队,他们的回答是“好了,我们可能需要他们在未来......”

+5

+1,特别是“必须使用VCS”。 – 2011-05-22 15:52:47

+1

当然,代码质量是解决这个问题的主要原因。发出这么多警告往往会导致人们错过其他更重要的警告。他们迷失在喧嚣中。如果你不能修复它们,你应该关闭它们,如果你的编译器允许关闭单个警告。如果没有,请找到一种方法将其过滤出来,这样您就不会错过关键的“变量在分配之前可能会被使用”的警告,以后可以节省您数小时的调试时间。 – andrewdski 2011-05-22 16:00:50

+0

@andrewski:确实。但我认为OP更质疑为什么编译器首先警告未使用的变量。 – 2011-05-22 16:09:42

相关问题