关于变量初始化的分析

时间:2021-10-08 19:48:48

1. 哪些变量需要初始化?

要养成好的编程习惯,通常局部变量都需要初始化,static类型的局部变量除外。

 

2. 为什么局部变量需要初始化?

因为局部变量是从stack或heap上直接分配的空间,而stack或heap上的空间是被反复使用的。

所以无法预知上一个时间点这块内存空间存了什么样的数据,这样有时可能会对程序的执行

结果造成影响。

 

3. 为什么static类型的局部变量或全局变量可以不用初始化?

static类型的局部变量仍然是从全局数据区分配空间的,所以我们也可以将其理解成一种特殊的

全局变量,这种特殊性体现在作用范围上,它的作用范围是某个函数体内或某个代码块内。

程序员可以按需对全局变量进行初始化,如果不初始化全局变量,那因为RAM掉电信息丢失的特性,

这些未初始化的全局变量都会被默认初始化为0。

我在下面这篇博文中有简单提及到存储器空间布局,有兴趣的话可以做个参考。

http://blog.csdn.net/boyxulin1986/article/details/11209265

 

4. static局部变量有什么作用?

所谓存在即合理,其优点是首先告诉编译器其是static类型的局部变量,所以必须要从全局数据区

分配内存;同时它是一个局部变量,它的作用范围就会限定在某个局部范围之内,这样别人也就

不会误用到。

那你如果真的要在函数体外定义一个全局变量,当然也能达到同样的目的。

 

5. 全局变量的使用?

如果你的全局变量要在多处使用,甚至是具有跨文件跨模块的特性,那么建议将其打包成函数来使用:

int get_value(void)
{
    return g_value;
}
void set_value(int value)
{
    g_value = value;
}

其好处是当程序错误时,有助于快速的定位到问题点。如果是在mulli-thread编程中,

那还要考虑使用必要的保护机制(如mutex),防止可能出现的race condition。

 

6. 局部变量的声明?

曾几何时,我们在C编程中都会将所有的局部变量的声明放在函数的最前面。

现代C语言已经支持随时随地在你需要时去声明一个局部变量,其好处是什么?

之前在网上看到一句话:“当你盖房子时,是愿意将锤子放在自己的手边还是邻居的院子里呢?”,

这种做法的好处就是当函数体较大时,可以提高代码的可读性(你不用在屏幕上来回翻页了)。

当然,关于这一点是有可能会出现争论的地方,这里不评论其好坏。

 

7. 为什么不能过多的使用全局变量?

我们知道,在编程时会不可避免的要使用到全局变量。但是过多的全局变量会增大模块之间的耦合性,

而耦合性增大了程序的可维护性以及可重用性就会降低。

 

以上是目前本人对变量初始话一块的心得体会;

如果其中有错误的地方,欢迎大家一起讨论。