c - 在一行中初始化C中的所有变量和未初始化的值

标签 c side-effects variable-initialization

在C语言中,是

int x, y, z = 0;

和这个一样吗?

int x = 0;
int y = 0;
int z = 0;

此外,如果我只说 int a;,似乎 a 的值是零,即使它未初始化,但不是未定义,如 What will be the value of uninitialized variable?

最佳答案

不,两者不等同。

int x, y, z = 0;

在这一行中,xy 将具有不确定的值,而 z 被初始化为零。

然而,您可以将其保留在“一行”中,但要付出一些冗长的代价:

int x = 0, y = x, z = y;

现在所有三个都被初始化为相同的值(您给 x 的值)。要用一个变量初始化另一个变量,只需预先定义初始化器即可。即使在同一条线上也能正常工作。上面的内容还可以让您很容易地更改所有变量的初始值。

或者,如果你觉得以前的样式很难看,你可以让它在两行中工作:

int x, y, z;
x = y = z = 0;

但现在是赋值,而不是初始化。

Also, if I just say int a;, it seems that the value of a is zero even if it is uninitialized, but not undefined as described in What will be the value of uninitialized variable?

“不确定值”并不意味着“非零”。零并没有使它成为变量初始值的无效候选者。一些“有用的”编译器在调试版本中将变量初始化为零。如果您不注意编译器警告,它可能会隐藏严重的错误。

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

相关文章:

c - 用于迭代多个数组的高效设计结构

c - 在 C 中迭代字符数组

reactjs - 为什么我们应该避免组件构造函数中的副作用?

python - Pytest:模拟具有不同 side_effect 的相同方法的多次调用

C# - 在不知道它会是什么的情况下初始化一个变量

delphi - 了解 Delphi 变量声明/初始化

c - 我的 C 程序在树莓派上创建了 4Gb 的文件,而它们的大小应该是 8 字节

c - 为什么C语言中的cexp(+infinity+I*infinity)=+/-infinity+I*NaN?

arrays - 如何使用设置全局变量的函数的输出填充数组?

c++ - C-like、构造函数和统一初始化之间有什么区别?