我知道使用使用未初始化的变量是错误的,但是问题是在未初始化的整数的情况下出现的,在以后的代码中为其赋值之前,我不使用它。
我应该得到奇怪的结果吗?还是只是不好的做法?
我是计算机科学专业的新生,对于任何错误,我们深表歉意!
答案 0 :(得分:8)
没关系:
int i;
result = someFunc(&i);//it does not matter what value i is, it will
//be assigned in the function.
其中定义了someFunc()
:
void someFunc(int *in)
{
*in = 10;
}
这不是 好
int i;
int someArray[10];
int a = someArray[i];//it is not known what value 'i' is. Fault if > 9.
但是出于良好的编程习惯(可维护性,可读性,主动错误预防),初始化始终是一个好主意:
int i = 0;
char *tok = NULL;
char string[] = {"string"};
float array[100] = {0};
... and so on.
答案 1 :(得分:3)
从程序角度看,最好不要立即初始化变量。所以这个:
int a;
// 10000 lines of code
// line 10001
a = 0
use(a);
很好。
但是发生的事情是,人们(包括我自己)将在第10001
行之前开始使用该变量,而忘记了他们没有对其进行初始化,产生垃圾并且比认为代码有问题。您知道恐慌发作,为什么这样不起作用?,您会执行以下操作:
int a;
// line 2001 this happens
use (a);
// 10000 lines of code
// line 10001
a = 0
use(a);
哦,该死的use(a)
函数不能正常工作,要花一两个小时调试完美工作的代码。有些编译器会警告您,而有些则不会。
这有点像汽车中的安全带,您不太可能会发生事故,但是无论如何都戴上它,因此您不应该等到看到警察戴上它,因为上警察之前发生事故的机会很小。
答案 2 :(得分:2)
如果很明显在初始化之前从未读取过变量,并且在读取之前总是在每个代码路径中初始化了变量,那么很好。在所有其他情况下,您应该初始化变量。
答案 3 :(得分:0)
如果您拥有统一变量,并且现在不尝试从它们读取有意义的值(您可以读取它们,也不会发生任何错误,但是它们的内容是垃圾),现在不会发生任何不良情况。 />
但是,这是一个好习惯,即尽可能初始化尽可能多的变量,即使您的代码现在可能还不错,如果以后进行更改,如果您留下了一些未初始化的变量,可能会引入很难发现的错误。
尤其是当存在许多不同的可能执行路径时,例如多个线程/进程/中断...