如果我不使用它,在分配值之前是否可以不使用C初始化局部变量,可以吗?

时间:2019-02-18 12:15:36

标签: c

我知道使用使用未初始化的变量是错误的,但是问题是在未初始化的整数的情况下出现的,在以后的代码中为其赋值之前,我不使用它。

我应该得到奇怪的结果吗?还是只是不好的做法?

我是计算机科学专业的新生,对于任何错误,我们深表歉意!

4 个答案:

答案 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)

如果您拥有统一变量,并且现在不尝试从它们读取有意义的值(您可以读取它们,也不会发生任何错误,但是它们的内容是垃圾),现在不会发生任何不良情况。 /> 但是,这是一个好习惯,即尽可能初始化尽可能多的变量,即使您的代码现在可能还不错,如果以后进行更改,如果您留下了一些未初始化的变量,可能会引入很难发现的错误。
尤其是当存在许多不同的可能执行路径时,例如多个线程/进程/中断...