c - 在 C 中初始化变量

标签 c initialization

我知道有时候如果你不初始化一个int,如果你打印整数,你会得到一个随机数。

但是将所有内容初始化为零似乎有点愚蠢。

我问是因为我正在评论我的 C 项目并且我在缩进上非常直接并且它完全编译(90/90 谢谢 Stackoverflow)但我想在样式点上获得 10/10。

那么,问题是:什么时候初始化合适,什么时候应该只声明一个变量:

int a = 0;

对比

int a;

最佳答案

有几种情况你不应该初始化一个变量:

  1. 当它具有静态存储持续时间(static 关键字或全局变量)并且您希望初始值为零时。如果您显式初始化,大多数编译器实际上会在二进制文件中存储零,这通常只是浪费空间(对于大型数组可能是巨大的浪费)。
  2. 当您立即将变量的地址传递给另一个填充其值的函数时。在这里,初始化只是浪费时间,并且可能会让代码的读者感到困惑,他们想知道为什么要将某些内容存储在即将被覆盖的变量中。
  3. 在后续代码完成执行之前无法确定变量的有意义的值。在这种情况下,使用虚拟值(例如零/NULL)初始化变量是非常有害的,因为如果您有一些代码路径从未分配有意义的值,这会防止编译器警告您。编译器擅长警告您访问未初始化的变量,但无法警告您“仍包含虚拟值”变量。

除了这些问题,我想说的是,在可能的情况下初始化非静态变量通常是一种很好的做法。

关于c - 在 C 中初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975008/

相关文章:

c - 输出中忽略 Scanf 和后续行

将 strtok 的结果复制到 C 中的 2 个字符串

java - 需要一种高效的算法来解决这种复杂的结构

c - 有没有一种方法可以在不执行这样的循环的情况下分配数组?

javascript - JS : Why are variables allowed to be declared both with and without the `var` keyword. ..?

c - 尝试打印方程的答案并在 C 中得到零。

java - 解析/扩展数千个 URL 的工具/库

初始化中的 Swift 动态属性

amazon-web-services - 更好的初始化

java - 如何避免在数组(Java)中引用相同的索引?