未使用的变量如何能够指示错误?

时间:2012-09-07 10:20:55

标签: recycle-bin

语言类型无关紧要;它可以起作用;程序性的,命令性的,面向对象的......或者根本不必是语言的情况。此问题适用于可能具有未使用的变量/代码的语言。

这个bug会是什么类型的?如何不使用额外的资格作为错误?

一点背景:虽然我在F#blog上看到它,但它似乎与语言无关;毕竟,你可以在任何语言的任何程序中使用未使用的变量。

3 个答案:

答案 0 :(得分:2)

我实际上看到未使用的变量(或未使用的参数)警告的情况是这样的:

start = 1
stop = 10
do_something(start, start, other_data)

stop未使用,因为我输错了,幸运的是警告会让我发现错误。显然还有其他方法可以捕获该错误(测试),并且有一些错误的实例不会被这种方式捕获,因为该变量仍在其他地方使用。

通常,未使用的变量只是警告代码不是作者真正想要写的(因为通常你不会想要一个未使用的变量)。并不一定意味着它的错误,只是你可能想用不同的方式写它。

答案 1 :(得分:1)

这是一个示例,其中未使用的变量可能会掩盖错误,直到删除未使用的变量:

int a[10];
int b[10]; // unused
int c[10];

// initialise a
for (i = 0; i <= 10; ++i)
    a[i] = i; // out of bounds write to a when i = 10

在上面的例子中,越界写入a恰好覆盖了未使用数组的开始(b),因此没有任何有害影响(这被称为 latent < / em> bug)。删除未使用的数组后,c的开头会被覆盖。

(请注意,上面的示例是依赖于编译器的 - 它假设b没有被智能编译器优化掉,并且数组是按顺序连续分配的,但一般原则仍然有效。)

答案 2 :(得分:0)

因为,我从未编写超过100行的函数/方法,我不知道何时或如何发生以下事情,但我能想到的一些场景涉及:

可能存在已修改的代码;现在没用了。

由于许多此类修改,可能会有一些代码已经死亡。死代码在大型代码库中存在问题;因为程序员几乎每次都必须阅读它并且无法调整(删除)它,因为那时他需要进行严格的错误测试。调整bug的代码会产生其他类型的bug。

未使用的变量显示缺乏计划或实施。最初由规范要求,但由于进一步延迟或规格保持相同,现在仍未使用。

可能是一种过早实施的界面类型。现在,API是公开的......

在具有预处理器(种类)指令的语言中,可以根据环境或构建类型修改代码;很多变量都可以使用。比如C#中的Debug和Release条件。这可以被标记为错误,如“它可能是不同构建或条件中的错误”

除此之外,我仍在寻找答案。