语言类型在这里无关紧要;它可以是功能性的;过程式的、命令式的、面向对象的……或者在语言中根本不必如此。这个问题适用于可以有未使用的变量/代码的语言。
这个错误是什么类型的?不使用额外的东西怎么能算作一个错误?
一点背景知识:虽然我是在 F#博客上读到的,但对我来说似乎与语言无关;毕竟,您可以在任何语言的任何程序中使用未使用的变量。
语言类型在这里无关紧要;它可以是功能性的;过程式的、命令式的、面向对象的……或者在语言中根本不必如此。这个问题适用于可以有未使用的变量/代码的语言。
这个错误是什么类型的?不使用额外的东西怎么能算作一个错误?
一点背景知识:虽然我是在 F#博客上读到的,但对我来说似乎与语言无关;毕竟,您可以在任何语言的任何程序中使用未使用的变量。
我实际上已经看到未使用变量(或未使用参数)的警告捕获错误的情况是这样的:
start = 1
stop = 10
do_something(start, start, other_data)
stop
未使用,因为我输入了错误的东西,幸运的是警告会引导我识别错误。显然还有其他方法可以捕获该错误(测试),并且该错误的某些实例不会以这种方式捕获,因为该变量仍在其他地方使用。
通常,未使用的变量只是一个警告,表明代码没有按照作者的真正意图编写(因为通常您不想要未使用的变量)。并不一定意味着它有问题,只是您可能想以不同的方式编写它。
这是一个示例,其中未使用的变量可能会掩盖错误,直到删除未使用的变量:
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
) 的开头,因此不会产生任何有害影响(这称为潜在错误)。当未使用的数组被删除时,开始c
被覆盖。
(请注意,上面的示例是依赖于编译器的——它假设b
智能编译器不会优化它,并且数组是按顺序连续分配的,但一般原则仍然有效。)
因为,我从来没有写过超过 100 行的函数/方法,我不知道以下事情何时或如何发生,但我能想到的一些场景包括:
可以有已经修改过的代码;现在没用了。
由于许多这样的修改,可能会有一些代码刚刚死掉。死代码在大型代码库中存在问题;因为程序员几乎每次都必须阅读它并且不能调整(删除)它,因为那样他就需要进行严重的错误测试。调整错误代码会产生其他类型的错误。
未使用的变量表明缺乏计划或实施。最初是规范要求的,但由于进一步延迟或规范保持不变,现在仍未使用。
可能是太早太早实现的接口类型的东西。现在,API 是公开的……
使用具有预处理器(某种)指令的语言,可以根据环境或构建类型修改代码;很多变量可以不用。比如 C# 中的调试和发布条件。这可以标记为错误,如“它可能是不同构建或条件下的错误”
除此之外,我仍在寻找答案。